Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema extraño

Estas en el tema de Problema extraño en el foro de C/C++ en Foros del Web. Bueno mi duda es esta, tengo 2 codigos que se suponen hacen lo mismo la diferencia que tienen es que uno usa printf y el ...
  #1 (permalink)  
Antiguo 18/08/2008, 16:41
Avatar de Fayca  
Fecha de Ingreso: abril-2008
Mensajes: 164
Antigüedad: 16 años, 1 mes
Puntos: 2
Problema extraño

Bueno mi duda es esta, tengo 2 codigos que se suponen hacen lo mismo
la diferencia que tienen es que uno usa printf y el otro cout los resultados
son distintos, no entiendo donde esta el problema, estos son los codigos


con cout:
este solo llega a el mensaje 41
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++) std::cout << i << ": " << sys_errlist[i] << '\n';
}
con printf:
este me imprime hasta el 131
Código:
#include <cstdio>
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++) printf("%d: %s\n",i , sys_errlist[i]);
}
creeo que es problema del cout, si es asi como pudiera solucionarlo,
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|
si es por eso como se usan
strerror, strerror_r
que creeo que son los que los remlasan en c++
  #2 (permalink)  
Antiguo 18/08/2008, 19:36
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 10 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
  #3 (permalink)  
Antiguo 18/08/2008, 20:06
Avatar de Fayca  
Fecha de Ingreso: abril-2008
Mensajes: 164
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Problema extraño

hola gracias por aclarar mi duda, por la informacion y por tu tiempo
  #4 (permalink)  
Antiguo 18/08/2008, 21:26
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Problema extraño

no hay de qué.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:56.