首页 文章

使用用户输入获取文件名时,为什么会出现分段错误?

提问于
浏览
1

我会将代码删除到我遇到问题的部分 .

当我执行以下操作时,代码可以正常工作

int main() {        
    FILE * fptr1 = fopen("in.txt", "r");
    fread(data, sizeof(char), size, fptr1);
    .
    .
    .
    FILE * fptr2 = fopen("out.txt", "w");
    fwrite(data, sizeof(char), size, fptr2);
    fclose(fptr2);
}

但是当我使用fgets使用fgets或scanf获取输入和输出文件名时,我会遇到分段错误 .

int main() {

    char inputfile[100];
    char outputfile[100];
    printf("name of input file: \n");
    fgets(inputfile, 100, stdin);
    printf("name of output file: \n");
    fgets(outputfile, 100, stdin);
    .
    .
    .
}

我已经玩了一段时间了 . 我尝试使用scanf并尝试更改inputfile和outputfile的已分配大小但我一直得到:

Segmentation fault (core dumped)

2 回答

  • 1

    使用 fgets() ,生成的文件名 inputfileoutputfile 包含终止换行符 . 它导致以下 fopen() 失败并返回 NULL .

    但是,在调用 fread()fwrite() 之前,您没有检查 FILE* 的无效,这导致了分段错误 .

  • 4

    使用 fgets() 输入的字符串包含终止'\n',这通常是意外的 . 虽然这不会直接导致段错误,但可能会导致 fopen() 返回 NULL ,因为它无法找到该文件 . 尝试从空文件指针读取数据将导致段错误 .

    if(fptr1 == 0)
    {
        perror("fopen()");
        exit(EXIT_FAILURE);
    }
    

    在你的 fopen() 陈述之后 .

相关问题