Ver Mensaje Individual
  #2 (permalink)  
Antiguo 18/08/2008, 19:36
yackcae
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 11 meses
Puntos: 2
Respuesta: Problema extraño

Lo que pasa es que el error 41 no está definido, por lo que la llamada a sys_errlist[i] con i==41 falla, solo tienes que incluir un if para que funcione:

Código:
	for (int i = 0; i < sys_nerr; i++) {
		if(sys_errlist[i]) std::cout << i << ": " << sys_errlist[i] << '\n';
	}
En cambio cuando usas printf en el error 41 pone "41: (null)"

Cita:
tambien cuando compilo ma da 2 warnings:
warning||`sys_errlist' is deprecated; use `strerror' or `strerror_r' instead|
warning||`sys_nerr' is deprecated; use `strerror' or `strerror_r' instead|
Bueno lo que está diciendo es que sys_errlist y sys_nerr son obsoletos y que deberías usar `strerror' o `strerror_r', el problema es que no sé como vas a crear el for usando solo strerror ya que esta función no retorna nada que indique que se ha llegado al máximo número de errores, de todas formas te dejo un código:

Código:
#include <cstdio>
#include <iostream>

int main()
{
	// En el array sys_errlist hay una descripción corta asociada a cada número
	// de error, sys_nerr es el total de elementos del array sys_errlist
	for (int i = 0; i < sys_nerr; i++) { // Como ves he usado sys_nerr porque no sé como hacerlo de otra forma.
		std::cout <<  i << ": " << strerror(i) << '\n';
	}
}
Unos URL que te darán más información:
http://www.opengroup.org/onlinepubs/.../strerror.html
http://www.gsp.com/cgi-bin/man.cgi?s...topic=strerror

Última edición por yackcae; 18/08/2008 a las 19:42