fclose() 以“分段错误(核心已转储)”结束

Fra*_*sco 1 c scanf c-strings segmentation-fault fclose

我在网上没有找到答案,如果有的话请链接...

#include <stdio.h>

int main(){
    FILE*fp;
    char arr[4];
    printf("Opening...\n");
    fp=fopen("slide.txt", "r");
    printf("Opened\n");
    if(fp==NULL){
        printf("No such file\n");
        return 1;
    }
    fscanf(fp, "%s", arr);
    printf("Printing...\n");
    printf("%s\n", arr);
    printf("Printed\n");
    printf("Closing...\n");
    fclose(fp);
    printf("Closed\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

文件内容:

ciao
Run Code Online (Sandbox Code Playgroud)

我的输出:

Opening...
Opened
Printing...
ciao
Printed
Closing...
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 9

声明字符数组至少像

char arr[5];
Run Code Online (Sandbox Code Playgroud)

并使用

fscanf(fp, "%4s", arr);
Run Code Online (Sandbox Code Playgroud)

也就是说,您需要在数组中为'\0'读取字符串的终止零字符保留一个空间。