【问题标题】:Getting error while using fgets in ansi c to open file在 ansic 中使用 fgets 打开文件时出错
【发布时间】:2012-05-14 07:18:01
【问题描述】:

我正在尝试使用 c 创建/打开文件。我使用 fgets 命令输入名称,所以我不能溢出缓冲区,如下所示:

void main() {
    printf("Enter file name: ");
    char * fileName = (char *) calloc(MAX_BUFFER_SIZE, sizeof(char));
    fgets(fileName, MAX_BUFFER_SIZE, stdin);
    FILE *inputFile = fopen(fileName, "w");
    if(inputFile==NULL) perror(fileName);
}

使用调试器,我可以看到我为文件名输入的值是我想要的值,但是 fopen 函数返回 NULL 指针并且我得到“无效参数”错误。如果我改用scanf("%s", fileName),则没有问题并且文件已创建,但这样我可能会溢出缓冲区。任何想法为什么第一个示例不起作用? 在此先感谢:)

【问题讨论】:

    标签: c


    【解决方案1】:

    fgets 读取的字符串末尾可能有换行符。在使用fopen 中的字符串之前,您必须将其删除。

    How to remove the newline at the end?

    【讨论】:

    • @azlisum 然后根据here接受答案。
    【解决方案2】:

    fgets() 对换行符的处理不同于 scanf("%s")gets()。与它们不同,fgets() 在字符串中包含换行符。输入文件名后,您按下回车键,这可能在文件名中包含换行符,因此使其无效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-01
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      • 2015-10-26
      • 1970-01-01
      相关资源
      最近更新 更多