Foros del Web » Programación para mayores de 30 ;) » Programación General »

Fprintf y el \0

Estas en el tema de Fprintf y el \0 en el foro de Programación General en Foros del Web. Hola, estoy flipando en colores. El problema es el siguiente: Tipico parser para generar un xml. Pongo: fprintf(fdxml,"<?xml version=\"1.0\" encoding=\"Iso...\"?>\n"); [fdxml: descriptor del fichero xml ...
  #1 (permalink)  
Antiguo 05/04/2006, 07:25
 
Fecha de Ingreso: diciembre-2005
Mensajes: 42
Antigüedad: 18 años, 4 meses
Puntos: 0
Fprintf y el \0

Hola, estoy flipando en colores. El problema es el siguiente:
Tipico parser para generar un xml.

Pongo: fprintf(fdxml,"<?xml version=\"1.0\" encoding=\"Iso...\"?>\n");
[fdxml: descriptor del fichero xml de salida]
Vamos, la cabecera del xml.

Pues en el fichero de salida me coloca un \0 [mirandolo ya a bajo nivel] entre xml y version.
Un final de cadena!!! Yo no corto la cadena!!! No pongo nada
Y entonces me lo junta asi: <?xmlversion...

El resto de blancos me los escribe bien.

¿A alguien le ha pasado esta cosa tan paranormal?. ¿Llamo ya a cuarto milenio?
  #2 (permalink)  
Antiguo 05/04/2006, 10:45
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
<?xml, puede ser que se interprete la parte de la cadena <?xml como algun modificador o algo asi.

Probe el código y no me escribió ningun \0

de hecho la salida del archivo fue esta.
Cita:
<?xml version="1.0" encoding="Iso..."?>
Por lo que deduzco que tu máquina está afectada por espíritus terrenales.
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #3 (permalink)  
Antiguo 05/04/2006, 13:20
 
Fecha de Ingreso: diciembre-2005
Mensajes: 42
Antigüedad: 18 años, 4 meses
Puntos: 0
La maquina es un AIX, uso el compilador cc. Es un poco antiguo.

¿Donde/Como puedo mirar si es un modificador "<?xml" ?
Esto no tiene sentido, es escribir una cadena en un fichero.

P.D:Hay algun antiespiritus?. El Norton ya ha hecho alguno?
  #4 (permalink)  
Antiguo 05/04/2006, 20:20
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Como abriste el flujo del archivo? Porque si lo abres de forma binaria, luego te da problemas par espacios y saltos. Si lo abres en modo texto no.
Si no, pues intenta separar las expresiones o usar una variable constante que contenga el texto que quieres y despues imprimir el contenido de la variables(mas bien seria de la cadena).

Saludos
  #5 (permalink)  
Antiguo 06/04/2006, 08:58
 
Fecha de Ingreso: diciembre-2005
Mensajes: 42
Antigüedad: 18 años, 4 meses
Puntos: 0
Bueno, he encontrado la solucion. House hubiese disfrutado con esto un montón. En un windows todo funcionaba pero en un UNIX(AIX) no.

Un cumulo de circunstancias han dado lugar a los siguientes sintomas raros:
1.Aparición del simbolo de fin de cadena en lugares aleatorios \0.
2.Desaparición de caracteres aleatoriamente en el fichero de salida (xml). Si desaparece el de un tag--> Fichero mal construido.

Detallo el Poltergeist que había, no lo he llegado a cazar del todo pero lo he visto :
1. La funcion strlen (string ...) devuelve la "cantidad" de caracteres de la cadena empezando desde 1, repito desde 1.
2. El array palabra[80]. Empieza desde cero.Es decir 80 elementos empezando desde 0 ---> [0...79]
3. La cadena de inicio era: "". Inicializacion. Habia que poner algo.

Pues bien los UNIX meten \0 mientras que los windows ponen "nada", vacio.

Pues bien debido a una situacion del programa, a un bucle por en medio,el Poltergeist se me colaba (el "") entre 79-80 por poner <= en un for. En un Unix \0 y ¡BOOM!.

He arreglado esto y se ha arreglado la desaparición de caracteres. El Poltergeist ha olido que he llamado a los cazafantasmas y se ha ido de la ciudad. Si vuelve le estaremos esperando.
  #6 (permalink)  
Antiguo 06/04/2006, 22:16
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
uf, denbes haber debugueado un bune rato para haber encontrado ese detalle.
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #7 (permalink)  
Antiguo 07/04/2006, 01:56
 
Fecha de Ingreso: diciembre-2005
Mensajes: 42
Antigüedad: 18 años, 4 meses
Puntos: 0
La otra teoría que tenía es que había un fallo en Matrix.

No use un debugger. No lo tengo.
  #8 (permalink)  
Antiguo 07/04/2006, 04:52
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
¿Cómo que no tienes un debugger? Todo "compilador" trae uno.
  #9 (permalink)  
Antiguo 07/04/2006, 05:10
 
Fecha de Ingreso: diciembre-2005
Mensajes: 42
Antigüedad: 18 años, 4 meses
Puntos: 0
Pues si el cc lo tenía, yo no lo he usado. Estoy accediendo a servidor a través de consola telnet.
A lo mejor tenía parametros para un debugger, pero bueno, ya esta arreglado.
Pa la proxima
  #10 (permalink)  
Antiguo 07/04/2006, 15:18
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
¿El cc de gcc? CC es un términno bastante específico. Si es gcc, el debugger es gdb.
  #11 (permalink)  
Antiguo 08/04/2006, 08:59
 
Fecha de Ingreso: diciembre-2005
Mensajes: 42
Antigüedad: 18 años, 4 meses
Puntos: 0
No gcc no, he escrito bien, se llama cc el compilador.
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:35.