计算字符的c程序中的分段错误

时间:2013-10-16 00:56:30

标签: c character counting

我是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);
}

3 个答案:

答案 0 :(得分:2)

有几件事:

1)在错误案例之后立即退出 - 不要继续。

2)打开argv 1,而不是“argv [0]”(argv [0]保存executable name,然后将其括在一个字符串中)

fopen(argv[1], "r")

通过检查argv[1]确保argc存在可能是一个好主意。

答案 1 :(得分:0)

打印错误时需要退出程序。相反,你无论如何都要进入while循环。由于fpnull,因此崩溃。

答案 2 :(得分:0)

问题在于这一行:

if ((fp = fopen(argv[0], "r")) == NULL)

argv[0]是您想要的程序名称argv[1],它是第一个用户字符串。

所以它应该是这样的:

if ((fp = fopen(argv[1], "r")) == NULL)