c - 为什么在使用用户输入获取文件名时出现段错误?

标签 c input user-input

我会将代码精简到只有我遇到问题的部分。

当我执行以下操作时,代码有效

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 或 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 并尝试更改输入文件和输出文件的分配大小,但我不断收到:

Segmentation fault (core dumped)

最佳答案

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

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

关于c - 为什么在使用用户输入获取文件名时出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36243416/

相关文章:

c - 如何在 C 中正确输出超过 16 位的整数?

c - 在 C 中链接库

java - Scanner 类 hasNextLine 无限循环

java - 等待来自另一个类的 JApplet 中的用户输入

java - 如何对单行中任意数量的用户输入数字求和

c - 调用函数填充后的空结构

android - 当虚拟键盘出现时,三星 Android 上的 Html 输入失去焦点

javascript - 更改另一个输入字段的 Alt 值

c - 在 C 中接受来自命令行的输入

c - 指向包含指针的结构的指针