[C con Clase] consulta sys_nerr

Miguel Ángel Ordóñez maormo en gmail.com
Mar Feb 24 20:49:27 CET 2015


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.
-- 
usuario registrado de GNU/Linux nº 416197
http://counter.li.org.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20150224/44d132d5/attachment.html>


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