特殊的细分错误,我不知道为什么

时间:2020-05-11 08:44:20

标签: c printf fault getc

#include<stdio.h>
int main(){
    int count[26];
    for(int i=0;i<26;i++){
        count[i]=0;
    }
    printf("xx1");
    FILE *p;
    printf("xx");
    p=fopen("test.txt","r");
    if(p==NULL)
        printf("error");
    int x=fgetc(p);
    while(x!='\0'){
        count[x-97]++;
        x=getc(p);
        }
    for(int i=0;i<26;i++){
        printf("%c:%d\t",i+97,count[i]);
    }
    fclose(p);
    return 0;
}

这是我运行getc()时的代码。发生错误...

程序收到信号SIGSEGV,分段错误。 _IO_getc(fp = 0x0)at getc.c:37 37 getc.c:没有那个文件或目录。

1 个答案:

答案 0 :(得分:0)

所以总结一下评论:

首先,UPDATE table_name t SET whole_params = jsonb_set(whole_params, '{exampleParam}','"value2"') WHERE t.whole_params ->> 'exampleParam' = 'value1'; 是字符串的结尾,不是文件的结尾。所以代替:

'\0'

您应该这样做:

while(x!='\0'){

其次,在执行以下操作之前,您应该验证while (x != EOF) { 的索引范围是x-97

count

第三,如果count[x-97]++; ,您的功能不应继续。