4

The program always ends up exiting. I seem to be running in to this problem frequently and I think I somehow previously fixed it but I'm not sure how. Why does it not create a file?

#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 filename\n");
    fgets(file_w, 100, stdin);
    fp = fopen(file_w, "w");
    if (fp == NULL){
        printf("Can't open file\n");
        exit(0);
    }   
    printf("Enter a string");
    fgets(string, 100, stdin);
    for(c = 0; c <= sizeof(string); c++)
    {
        fprintf(fp, "%s\n", string);
    }

    printf("file written");
    fclose(fp);
    return 0;
}
4

5 回答 5

2

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

printf("%s\n", file_w);

就在你得到file_w的那一行之后,只是为了确保输入你想要的。在我同样的情况下,终端可能配置错误。

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

/tmp/newfile.txt

如果您的计算机是 Windows... 那么尝试查看 C:\temp\ 是否存在(或创建它)然后输入:

C:\temp\newfile.txt

无论如何,请记住您可以指定绝对路径,而不仅仅是文件名。因此,请仔细检查您是否有权(即权限)写入应写入文件的目录。

如果您想检查错误并更好地描述问题,请尝试使用以下行而不是您的代码,就在 fopen 下

  if( fp == NULL ) {
        // Error, as expected.
        perror( "Error opening file" );
        printf( "Error code opening file: %d\n", errno );
        printf( "Error opening file: %s\n", strerror( errno ) );
        exit(-1);
  }

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

于 2012-12-21T08:59:49.023 回答
1

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

于 2012-12-21T09:33:40.380 回答
0

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

w标志执行以下操作:

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

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

如果它不这样做,那么您还有另一个问题,但是从您提供的少量信息中,很难说出它是什么。

于 2012-12-21T08:48:59.063 回答
0

我尝试了以下文件名:

C:\\temp\\test_file.txt

或者

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

它工作正常,没有错误(我在 Windows 10 中制作。GCC win32,版本:6.3.0)。

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

于 2021-09-10T09:22:11.693 回答
-2

使用gets()而不是fgets()...它会工作

. . 获取(文件_w);. .

于 2021-07-24T09:46:47.630 回答