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

问题描述 投票:-1回答:1
#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:3737 getc.c:没有那个文件或目录。

c printf fault getc
1个回答
0
投票

所以总结评论:

首先,'\0'是字符串的末尾,not文件的末尾。因此,代替:

while(x!='\0'){

您应该这样做:

while (x != EOF) {

其次,在执行以下操作之前,您应验证x-97count的索引范围内:

count[x-97]++;

第三,如果p == NULL,您的功能不应继续。

© www.soinside.com 2019 - 2024. All rights reserved.