【发布时间】:2014-09-12 02:30:33
【问题描述】:
终端一直说:segmentation fault 11。 我的代码是:
int main()
{
FILE *file;
file=fopen("test.txt","r");
int c;
int vowelCount=0;
while ((c=getc(file)!=EOF)) {
if( c=='a' | c=='e' | c=='i'| c=='o' | c=='u')
{
vowelCount++;
}
}
printf("%d",vowelCount);
return 0;
}
【问题讨论】:
-
尝试调试你的程序
-
另外你需要检查
file == NULL是否在fopen之后但在getc之前 -
您正在泄漏文件句柄 - 您永远不会关闭文件。
-
将
(c=getc(file)!=EOF)更改为(c = getc(file)) != EOF可能会获得更好的结果,尽管这不会导致段错误 -
@chux:
#include <stdio.h>仅在问题中显示的代码中丢失;如果没有有效定义FILE *的内容,代码将无法编译。在代码中进行核心转储的唯一原因是无法打开文件,然后在getc()中使用空指针。一旦经过测试,代码将永远找不到任何元音,因为c将在每次通过循环时为1(通过整理分配和比较以及条件中的括号来修复)。当然,最后的printf()应该包含换行符。
标签: c file segmentation-fault