c语言 - 为什么 fopen 中的"w"不创建新文件?



程序总是以退出结束。我似乎经常遇到这个问题,我想我以前不知何故修复了它,但我不确定如何。为什么不创建文件?

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main (void){
    FILE *fp;
    int c;
    char file_w[100];
    char string[100];
    printf("Enter filenamen");
    fgets(file_w, 100, stdin);
    fp = fopen(file_w, "w");
    if (fp == NULL){
        printf("Can't open filen");
        exit(0);
    }   
    printf("Enter a string");
    fgets(string, 100, stdin);
    for(c = 0; c <= sizeof(string); c++)
    {
        fprintf(fp, "%sn", string);
    }
    printf("file written");
    fclose(fp);
    return 0;
}

尝试打印您输入的文件名:

printf("%sn", file_w);

在得到file_w的行之后,确保输入了您想要的内容。在相同的情况下,终端可能配置错误。

如果您的计算机是Linux或Unix,请尝试输入绝对名称路径:

/tmp/newfile.txt

如果你的电脑是Windows…我们将尝试查看C:temp是否存在(或创建它),然后输入:

C:tempnewfile.txt

在任何情况下,记住您可以指定一个绝对路径,而不仅仅是文件名。所以仔细检查你是否有权利(即权限)写入文件应该写入的目录。

如果您想检查错误并对问题有更好的描述,请尝试使用以下行来代替您的代码,就在fopen

下面
  if( fp == NULL ) {
        // Error, as expected.
        perror( "Error opening file" );
        printf( "Error code opening file: %dn", errno );
        printf( "Error opening file: %sn", strerror( errno ) );
        exit(-1);
  }

strerror这是一个很好的函数,因为它返回的是问题的描述而不是错误代码

我打赌问题是"从fgets()实际名称后的不可见字符"。我会让你弄清楚这个角色到底是什么,它来自哪里以及如何修复它,因为"努力解决问题"是编程学习过程的一部分。如果很容易,每个人都能做到。

如果fopen的返回值为NULL,则表示发生了一些错误。我建议您查看errno全局变量,看看发生了什么错误,以帮助您调试为什么它不能打开文件。

w标志的作用如下:

write:为输出操作创建一个空文件。如果同名文件已经存在,其内容将被丢弃,该文件将被视为一个新的空文件。

所以当文件不存在时,它应该创建一个文件,或者当它存在时,覆盖它的内容。

如果它不这样做,你有另一个问题,但从你给的一点信息,很难判断是什么。

我尝试了如下文件名:

C: temp test_file.txt

fopen("C: temp employees.txt","w");

,它工作得很好,没有错误(我在Windows 10中做的)。GCC win32, Version: 6.3.0 .

我认为你必须使用绝对路径来创建文件

使用gets()代替fgets()…它会工作的

。.得到(file_w);..

最新更新