fwrite escribir un entero
-
01-10-2019 - |
Pregunta
Estoy tratando de escribir una palabra en un archivo utilizando esta función:
extern void write_int(FILE * out, int num) {
fwrite(&num,sizeof(int),1, out);
if(ferror(out)){
perror(__func__);
exit(EXIT_FAILURE);
}
}
Pero consigo un fallo de segmentación cada vez que intenta ejecutar el fwrite. Miré a la página del manual de fwrite (3) y siento que he usado correctamente, ¿hay algo que me falta?
Solución
Pruebe esto en su lugar:
void write_int(FILE * out, int num) {
if (NULL==out) {
fprintf(stderr, "I bet you saw THAT coming.\n");
exit(EXIT_FAILURE);
}
fwrite(&num,sizeof(int),1, out);
if(ferror(out)){
perror(__func__);
exit(EXIT_FAILURE);
}
}
Y por qué era su función original extern
?
Otros consejos
¿Es válido el identificador de archivo? ¿Usted fopen () con "w"? fwrite () fallará si el no lo es.
La función en sí realmente no hace nada, por lo que es, obviamente, la llamada fwrite ese es el problema. Examinar los argumentos.
out
no contiene la dirección del archivo, sino que contiene la dirección del archivo de puntero de su fallecimiento en el principal. Este prototipo de función debe ser como:
extern void write_int(FILE * & out, int num);
De esta manera usted está haciendo un doble puntero al puntero en la principal, que a continuación se señala al archivo.