c - fgetc() 创建段错误

标签 c linux fgetc

我在同一个程序中创建了文件“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,您应该使用相同的数据类型来存储返回值和进一步使用。

就是说,当 f1fp1 中的任何一个为 NULL 时,您仍然继续访问那些文件指针,这可能会创建 UB .您应该对 NULL 检查和 returnexit 有所了解,这样访问这些指针的代码就不会到达。

关于c - fgetc() 创建段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38588793/

相关文章:

c - 有L-BFGS-B C端口吗?

c - 获取主机的protobyname

c - fgetc() 在第二个输入时退出?

使用C语言更改GRUB的变量

c - 等待代码时运行代码

c - c中的二维数组和指针

linux - writev只写部分数据怎么处理?

c - 将初始值设置为 c 中结构的字段?

c - 使用 "fgetc"提前发送 EOF

c++ - fseek 和 fscan 从 C++ 中的 .DAT 文件给出错误的结果