为什么此代码导致分段错误?

Hic*_*ick 0 c

#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);

}
Run Code Online (Sandbox Code Playgroud)

EFr*_*aim 10

因为字符不是字符串.

试试fputc.

顺便说一句:c应该是int,否则你将无法检测到EOF.EOF> 255.


CB *_*ley 6

代码中存在许多可能导致问题的错误.

fpfp1应依据它来检查NULL后,被分配的结果fopen来检查文件打开失败.

c应该是int这样的类型,以便您可以正确地区分EOF正确读取的有效字符.

c == "" 尝试将字符值与文字零长度字符串的地址进行比较.

fprintf(fp1,"%s",c)将该字符值c解释为常量字符串的地址,并尝试按照此地址打印字符串.这是导致分段错误的最可能的错误.


不太重要的风格问题.

返回值main应为a int.即使许多实现允许,它也是可移植的void main(void).

由于你的if子句的主体匹配如果循环运行到结尾并且后面跟a会发生什么continue,那么删除这个子句并应用与你认为c==""应该变成的相反的if语句可能会更清楚.目前是else声明.


Bli*_*ndy 5

c=="" 也不会像你认为的那样工作.