Discussion:
Por qu'e no es un error...?
(demasiado antiguo para responder)
Horacio Castellini
2005-06-07 19:54:15 UTC
Permalink
Holas...

Por error coloqu'e esta porci'on de c'odigo en un programa...

printf(stderr,"bla, bla \n");

lo compil'o sin problemas y cuando lo ejecutaba, me aparec'ian una serie
de chirimbolos, sin core ni nada... ??? mi compilador es el gcc 3.3,,,
Alguien me puede explicar porque...???

Saludos Y gracias Horacio
Oscar Garcia
2005-06-07 20:17:15 UTC
Permalink
El Tue, 7 Jun 2005 16:54:15 -0300, Horacio Castellini
Post by Horacio Castellini
Por error coloqu'e esta porci'on de c'odigo en un programa...
printf(stderr,"bla, bla \n");
lo compil'o sin problemas y cuando lo ejecutaba, me aparec'ian una serie
de chirimbolos, sin core ni nada... ??? mi compilador es el gcc 3.3,,,
Alguien me puede explicar porque...???
Creo que querías:
fprintf(stderr,"bla, bla \n");

Quizá te habrá salido un warning diciendo que es muy rara la
conversión que has querido hacer (de un FILE* a un char*, pero al ser
dos punteros ha hecho el cast sin problemas).

El problema radica que a diferencia de fprintf el primer parámetro no
es un puntero a un archivo abierto (a su "controlador" mejor dicho),
si no que es a la cadena de formato. Por eso se ven simbolitos raros,
porque en la zona de memoria del controlador hay datos binarios (y
suerte que encuentra un caracter 0 para terminar la cadena, si no te
daría un core dumped).
Post by Horacio Castellini
Saludos Y gracias Horacio
Saludos y de nadas.
--
Óscar Javier García Baudet
LinaresDigital
http://redstar.linaresdigital.com/
Horst Kraemer
2005-06-07 20:28:03 UTC
Permalink
Post by Horacio Castellini
Holas...
Por error coloqu'e esta porci'on de c'odigo en un programa...
printf(stderr,"bla, bla \n");
lo compil'o sin problemas y cuando lo ejecutaba, me aparec'ian una serie
de chirimbolos, sin core ni nada... ??? mi compilador es el gcc 3.3,,,
Alguien me puede explicar porque...???
Estas seguro que compila sin problemas?

warning: passing arg 1 of 'printf' from incompatible pointer type

es obligatorio.
--
Horst
Horst Kraemer
2005-06-07 20:29:06 UTC
Permalink
Post by Horacio Castellini
Holas...
Por error coloqu'e esta porci'on de c'odigo en un programa...
printf(stderr,"bla, bla \n");
lo compil'o sin problemas y cuando lo ejecutaba, me aparec'ian una serie
de chirimbolos, sin core ni nada... ??? mi compilador es el gcc 3.3,,,
Alguien me puede explicar porque...???
Estás seguro que compila sin problemas?

warning: passing arg 1 of 'printf' from incompatible pointer type

es obligatorio.
--
Horst
p***@nospam.demon.co.uk
2005-06-07 20:48:29 UTC
Permalink
Post by Horacio Castellini
Holas...
Por error coloqu'e esta porci'on de c'odigo en un programa...
printf(stderr,"bla, bla \n");
fprintf(stderr,"bla, bla \n");
Post by Horacio Castellini
lo compil'o sin problemas y cuando lo ejecutaba, me aparec'ian una serie
de chirimbolos, sin core ni nada... ??? mi compilador es el gcc 3.3,,,
Alguien me puede explicar porque...???
Saludos Y gracias Horacio
Pete
--
"We have not inherited the earth from our ancestors,
we have borrowed it from our descendants."
Antoine Leca
2005-06-08 09:49:41 UTC
Permalink
Post by Horacio Castellini
printf(stderr,"bla, bla \n");
lo compil'o sin problemas
¿Con qué opciones compila?
¿Tienes <stdio.h> #incluido?

Es cierto que se puede que eso ocure de manera legal (si la biblioteca
estándar ha eligido definir FILE como char, para engañar algunos programas
que miran dendro de los FILEs), pero no es muy generalizado.
Post by Horacio Castellini
y cuando lo ejecutaba, me aparec'ian una
serie de chirimbolos, sin core ni nada...
Alguien me puede explicar porque...???
printf() ha leído el contenido de stderr como si fuera una cadena de formato
:^). Como ha encontrado un '\0' bastante rapidamente, no hubo problemas de
desbordamiento de pila, entonces ningún core (eso te enseña que core no es
la única forma de tener bugs). Y claro está, el contenido de stderr NO es
apto para el consumo humano como ¡cadena de cáracteres!


Antoine

Loading...