<div dir="ltr"><div><div>Muy buenas.<br><br></div>Retomando el aprendizaje de c y c++, estoy con un ejercicio tonto que es mostar una lista con todos los códigos de error.<br></div><div><div><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 clear="all"><div><div><br></div><div>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></div><div>Y la ejecución muestra hasta el error 134 (para este valor ya devuelve NULL)<br><br></div><div>Así que he modificado el programa para usar strerror  de esta forma (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></div><div>   // tenía definida la variable cadena cono char *cadena, pero <br></div><div>   // me daba un error SIGSEGV, Segmentation fault porque strncopy no comprueba si copia una cadena más grande en una más pequeña</div><div>   <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></div><div><br><br></div><div>Como el error nº 41 no está definido, ahí finaliza el programa.<br><br></div><div>La pregunta que os quería hacer, ¿hay alguna alternativa a la variable sys_nerr?<br><br></div><div></div><div>Un saludo y muchas gracias.<br></div><div>Miguel Ángel.<br></div><div>-- <br><div>usuario registrado de GNU/Linux nº 416197 <br><a href="http://counter.li.org" target="_blank">http://counter.li.org</a>.</div>
</div></div></div></div></div>