我正在尝试在.txt文件中生成报告,但当我的fprintf
遇到\n
时,它会崩溃。这是关于打开文件和崩溃的代码:
FILE *f;
f = fopen("estructuras.txt", "w");
fprintf(f, "");
printf("3"); //This is the last thing I see.
fprintf(f, "TEXT TO INPUT\n")
fclose(f);
答案 0 :(得分:3)
问题是你没有检查文件是否打开。如果失败,它将返回NULL并且会对fprintf
做坏事。
您的第一个fprintf(f, "");
是无操作。打印空字符串不起作用,因此"工作" (虽然我怀疑这是否有保障)。 printf("3");
执行stdout并且不受失败的fopen
的影响。 fprintf(f, "TEXT TO INPUT\n")
终于尝试打印到NULL和pukes。
必须检查所有系统调用。它们在出错时都有不同的返回值。 fopen
返回NULL,错误位于errno
。有fopen
错误处理的方法很多,这里是我喜欢的方法,它为用户提供调试问题的信息。
#include <string.h> // for strerror()
#include <errno.h> // for errno
#include <stdio.h>
#include <stdlib.h>
int main(){
// Put the filename in a variable so it can be used in the
// error message without needing to be copied.
char file[] = "estructuras.txt";
FILE *fp = fopen(file, "w");
if( fp == NULL ) {
// Display the filename, what you were doing with it, and why it wouldn't open.
fprintf(stderr, "Could not open '%s' for writing: %s\n", file, strerror(errno));
exit(-1);
}
}
strerror(errno)
将数字errno
错误代码转换为人类可读的字符串。文件名周围有引号,以防额外的空格偷偷进入。
因此,您会收到Could not open 'estructuras.txt': No such file or directory
之类的错误。