我是C的新手并试图编写一个计算括号,大括号,空格和新行的程序。编译器发出错误:打开fileSegmentation fault(core dumped)时出错
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp;
char c;
int blank, tab, openbrace, closedbrace,openbracket,closedbracket, newline=0;
if ((fp = fopen("argv[0]", "r")) == NULL)
{
fprintf(stderr, "Error opening file");
}
while ((c=fgetc(fp)) != EOF)
{
switch(c)
{
case '{':
openbrace++;
case '}':
closedbrace++;
case '[':
openbracket++;
case ']':
closedbracket++;
case '\n':
newline++;
}
}
fclose(fp);
printf("\nThe number of { are %d", openbrace);
printf("\nThe number of } are %d", closedbrace);
printf("\nThe number of [ are %d", openbracket);
printf("\nThe number of ] are %d", closedbracket);
printf("\nThe number of new lines are %d", newline);
}
答案 0 :(得分:2)
有几件事:
1)在错误案例之后立即退出 - 不要继续。
2)打开argv 1,而不是“argv [0]”(argv [0]保存executable name,然后将其括在一个字符串中)
fopen(argv[1], "r")
通过检查argv[1]
确保argc
存在可能是一个好主意。
答案 1 :(得分:0)
打印错误时需要退出程序。相反,你无论如何都要进入while
循环。由于fp
为null
,因此崩溃。
答案 2 :(得分:0)
问题在于这一行:
if ((fp = fopen(argv[0], "r")) == NULL)
argv[0]
是您想要的程序名称argv[1]
,它是第一个用户字符串。
所以它应该是这样的:
if ((fp = fopen(argv[1], "r")) == NULL)