<div dir="ltr"><div class="gmail_default" style="font-size:small;color:rgb(102,0,204)">Asumo que lo que deseas es motrar la lista de errores.<br><br>#include <stdlib.h>  /* para exit */<br>#include <stdio.h><br><br>int main()<br>{<br>  int i;;<br>  for (i=0; i< sys_nerr; i++) <br>    printf ("%d: %s\n", i, sys_errlist[i]);<br>  exit(0);<br>}<br><br></div><div class="gmail_default" style="font-size:small;color:rgb(102,0,204)">funciona correctamente. <br></div><div class="gmail_default" style="font-size:small;color:rgb(102,0,204)">depende mucho del compilador.<br><br></div><div class="gmail_default" style="font-size:small;color:rgb(102,0,204)">En mi caso probe con la ide de odeblock, que trae includo GCC compilador.<br><br></div><div class="gmail_default" style="font-size:small;color:rgb(102,0,204)">tal vez si le añades "#include <errno.h>"<br></div><div class="gmail_default" style="font-size:small;color:rgb(102,0,204)"><br><br></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature">Atte.<br>_______________________________<br><br><br>_______________________________<br><br>*Antes de imprimir este mensaje, asegúrese de que sea necesario. Proteger el <br>medio ambiente está en nuestras manos. <br>Before you print this message, make sure it is necessary. It is in our hands <br>to protect our environment.<br>*<br><br></div></div>
<br><div class="gmail_quote">El 24 de febrero de 2015, 15:54, Juan José López <span dir="ltr"><<a href="mailto:juanjolistascorreo@gmail.com" target="_blank">juanjolistascorreo@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">el Tue, 24 Feb 2015 20:49:27 +0100<br>
Miguel Ángel Ordóñez <<a href="mailto:maormo@gmail.com">maormo@gmail.com</a>> dijo:<br>
<div><div class="h5"><br>
> Muy buenas.<br>
><br>
> Retomando el aprendizaje de c y c++, estoy con un ejercicio tonto que<br>
> es mostar una lista con todos los códigos de error.<br>
><br>
> #include <stdlib.h>  /* para exit */<br>
> #include <stdio.h><br>
><br>
> int main()<br>
> {<br>
>   int i;;<br>
>   for (i=0; i< sys_nerr; i++)<br>
>     printf ("%d: %s\n", i, sys_errlist[i]);<br>
>   exit(0);<br>
> }<br>
><br>
> la compilación me devuelve los avisos:<br>
> `sys_errlist' is deprecated; use `strerror' or `strerror_r' instead<br>
> `sys_nerr' is deprecated; use `strerror' or `strerror_r' instead<br>
><br>
> Y la ejecución muestra hasta el error 134 (para este valor ya<br>
> devuelve NULL)<br>
><br>
> Así que he modificado el programa para usar strerror  de esta forma<br>
> (no se si es muy elegante...) :<br>
><br>
> #include <stdio.h><br>
> #include <string.h><br>
><br>
> int main()<br>
> {<br>
>    int errnum = 0;<br>
>    int resultado;<br>
>    char *desconocido = "Unknown error";<br>
>    char cadena[256] = "            ";<br>
>    strncpy(cadena, strerror(errnum),13);<br>
>    // tenía definida la variable cadena cono char *cadena, pero<br>
>    // me daba un error SIGSEGV, Segmentation fault porque strncopy no<br>
> comprueba si copia una cadena más grande en una más pequeña<br>
><br>
>    while ((resultado = strcmp(cadena,desconocido)) != 0)<br>
>    {<br>
>      printf( "%d: %s\n", errnum, strerror( errnum ) );<br>
>      errnum++;<br>
>      strncpy(cadena, strerror(errnum),13);<br>
>    }<br>
><br>
>   return 0;<br>
> }<br>
><br>
><br>
> Como el error nº 41 no está definido, ahí finaliza el programa.<br>
><br>
> La pregunta que os quería hacer, ¿hay alguna alternativa a la variable<br>
> sys_nerr?<br>
><br>
> Un saludo y muchas gracias.<br>
> Miguel Ángel.<br>
<br>
</div></div>Me temo que no. 'errno' y funciones relacionadas no están pensadas para<br>
eso, sino para informar sobre errores y mostrar mensajes sobre los<br>
mismos. Si lo piensas bien, verás que este comportamiento es lógico.<br>
Las funciones de la librería de C son implementadas por cada Sistema<br>
Operativo como buenamente puede. Los errores no tienen porqué ser<br>
números correlativos. Podría ser una máscara de bits o cualquier otro<br>
mecanismo que el sistema o el hardware maneje de forma 'cómoda', o<br>
implementar los errores mediante 'rangos' de números y asignar estos<br>
rangos a distintos controladores, o cualquier otra forma. Es decir, que<br>
ni siquiera tiene que existir un límite real (aparte del tamaño mismo<br>
del tipo, 16 32 o 64 bits).<br>
<br>
Siempre lo puedes hacer de forma 'no portable'. Edita el archivo<br>
'errno.h' y busca el valor máximo utilizado. Tendrás que recompilar<br>
cada vez que actualices las bibliotecas. El precio de la 'no<br>
portabilidad'  ;-)<br>
<br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</blockquote></div><br></div>