#include<stdio.h>
void main()
{
FILE *fp,*fp1;
char c;
fp=fopen("test.txt","r");
fp1=fopen("test1.txt","w");
c=getc(fp);
while(c!=EOF)
{
if (c=="")
{
c=getc(fp);
continue;
}
else
fprintf(fp1,"%s",c);
c=getc(fp);
}
fclose(fp);
fclose(fp1);
}
答案 0 :(得分:10)
因为字符不是字符串。
尝试fputc。
BTW:c应该是int,否则你将无法检测到EOF。 EOF&gt; 255。
答案 1 :(得分:6)
代码中存在许多可能导致问题的错误。
在分配fp
的结果以检查文件打开失败后,应该fp1
和NULL
与fopen
进行核对。
c
的类型应为int
,以便您可以正确区分EOF
与正确阅读的有效字符。
c == ""
尝试将字符值与文字零长度字符串的地址进行比较。
fprintf(fp1,"%s",c)
将字符值c解释为常量字符串的地址,并尝试按照此地址打印字符串。这是导致分段错误的最可能的错误。
不太重要的风格问题。
main
的返回值应为int
。即使许多实现允许void main(void)
,它也能正常运行。
由于if
子句的主体与循环运行到最后并且后跟continue
的情况相匹配,因此删除此子句并应用if可能会更清楚声明与您认为c==""
应该成为现在的else
声明相反的声明。
答案 2 :(得分:5)
c==""
也不会像您认为的那样发挥作用。
答案 3 :(得分:3)
您的问题是变量c的fprintf(“%s”)。 c不是字符串,它是单个字符。用
替换该行fprintf(fp1,"%c",c);
它会起作用。有更好的方法可以将一个文件的内容实际复制到另一个文件中。
答案 4 :(得分:0)
代码由于非法内存访问而导致分段错误,fprintf查找空字符以终止,并且在此过程中访问无效的内存位置。
还必须检查文件指针是否为null,如果有任何代码,则代码应正常退出它们是null,否则它也会导致段错误。