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

时间:2016-03-27 03:09:26

标签: c input user-input

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

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

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);
    .
    .
    .
}

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

Segmentation fault (core dumped)

我一直在玩这个。我尝试使用scanf并尝试更改inputfile和outputfile的已分配大小,但我一直得到:

d3.select("svg path.state").on("click", function() {
  // Do some stuff.
});

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

添加

if(fptr1 == 0)
{
    perror("fopen()");
    exit(EXIT_FAILURE);
}
在您的fopen()陈述之后