我在同一个程序中创建了文件“wor.txt”并关闭了它的写入流。但是当我尝试在第一次运行时访问它(我创建了文件)它给出了段错误但是当我重新运行这个程序时它运行成功。
当我删除自动生成的文件并再次运行程序时,它会出现段错误,并且在第二次运行时(不删除文件)它再次成功运行。
注意:文本文件中有数据,因此它不是空的(我在文件管理器中第一次运行后看到了它)
FILE *fp1= fopen("wor.txt","r");
FILE *f1= fopen("wordsa.txt","ab+");
if((f1==NULL)||(f2==NULL)){
printf("f1 or f2 is null");
}
char c='0';
while((c)!=EOF){
printf("Here is one marker\n");
c=fgetc(fp1); //This Line gives error
printf("Here is another marker\n");
fputc(c,f1);
}
最佳答案
char
不足以满足EOF
,将类型更改为int
。
检查 man page fgetc()
,它返回一个int
,您应该使用相同的数据类型来存储返回值和进一步使用。
就是说,当 f1
或 fp1
中的任何一个为 NULL
时,您仍然继续访问那些文件指针,这可能会创建 UB .您应该对 NULL 检查和 return
或 exit
有所了解,这样访问这些指针的代码就不会到达。
关于c - fgetc() 创建段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38588793/