[C con Clase] consulta sys_nerr

MuGliDaRk muglidark en gmail.com
Mar Feb 24 23:28:40 CET 2015


Asumo que lo que deseas es motrar la lista de errores.

#include <stdlib.h>  /* para exit */
#include <stdio.h>

int main()
{
  int i;;
  for (i=0; i< sys_nerr; i++)
    printf ("%d: %s\n", i, sys_errlist[i]);
  exit(0);
}

funciona correctamente.
depende mucho del compilador.

En mi caso probe con la ide de odeblock, que trae includo GCC compilador.

tal vez si le añades "#include <errno.h>"



Atte.
_______________________________


_______________________________

*Antes de imprimir este mensaje, asegúrese de que sea necesario. Proteger
el
medio ambiente está en nuestras manos.
Before you print this message, make sure it is necessary. It is in our
hands
to protect our environment.
*


El 24 de febrero de 2015, 15:54, Juan José López <
juanjolistascorreo en gmail.com> escribió:

> el Tue, 24 Feb 2015 20:49:27 +0100
> Miguel Ángel Ordóñez <maormo en gmail.com> dijo:
>
> > Muy buenas.
> >
> > Retomando el aprendizaje de c y c++, estoy con un ejercicio tonto que
> > es mostar una lista con todos los códigos de error.
> >
> > #include <stdlib.h>  /* para exit */
> > #include <stdio.h>
> >
> > int main()
> > {
> >   int i;;
> >   for (i=0; i< sys_nerr; i++)
> >     printf ("%d: %s\n", i, sys_errlist[i]);
> >   exit(0);
> > }
> >
> > la compilación me devuelve los avisos:
> > `sys_errlist' is deprecated; use `strerror' or `strerror_r' instead
> > `sys_nerr' is deprecated; use `strerror' or `strerror_r' instead
> >
> > Y la ejecución muestra hasta el error 134 (para este valor ya
> > devuelve NULL)
> >
> > Así que he modificado el programa para usar strerror  de esta forma
> > (no se si es muy elegante...) :
> >
> > #include <stdio.h>
> > #include <string.h>
> >
> > int main()
> > {
> >    int errnum = 0;
> >    int resultado;
> >    char *desconocido = "Unknown error";
> >    char cadena[256] = "            ";
> >    strncpy(cadena, strerror(errnum),13);
> >    // tenía definida la variable cadena cono char *cadena, pero
> >    // me daba un error SIGSEGV, Segmentation fault porque strncopy no
> > comprueba si copia una cadena más grande en una más pequeña
> >
> >    while ((resultado = strcmp(cadena,desconocido)) != 0)
> >    {
> >      printf( "%d: %s\n", errnum, strerror( errnum ) );
> >      errnum++;
> >      strncpy(cadena, strerror(errnum),13);
> >    }
> >
> >   return 0;
> > }
> >
> >
> > Como el error nº 41 no está definido, ahí finaliza el programa.
> >
> > La pregunta que os quería hacer, ¿hay alguna alternativa a la variable
> > sys_nerr?
> >
> > Un saludo y muchas gracias.
> > Miguel Ángel.
>
> Me temo que no. 'errno' y funciones relacionadas no están pensadas para
> eso, sino para informar sobre errores y mostrar mensajes sobre los
> mismos. Si lo piensas bien, verás que este comportamiento es lógico.
> Las funciones de la librería de C son implementadas por cada Sistema
> Operativo como buenamente puede. Los errores no tienen porqué ser
> números correlativos. Podría ser una máscara de bits o cualquier otro
> mecanismo que el sistema o el hardware maneje de forma 'cómoda', o
> implementar los errores mediante 'rangos' de números y asignar estos
> rangos a distintos controladores, o cualquier otra forma. Es decir, que
> ni siquiera tiene que existir un límite real (aparte del tamaño mismo
> del tipo, 16 32 o 64 bits).
>
> Siempre lo puedes hacer de forma 'no portable'. Edita el archivo
> 'errno.h' y busca el valor máximo utilizado. Tendrás que recompilar
> cada vez que actualices las bibliotecas. El precio de la 'no
> portabilidad'  ;-)
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20150224/40934899/attachment.html>


Más información sobre la lista de distribución Cconclase