程序总是以退出结束。我似乎经常遇到这个问题,我想我以前不知何故修复了它,但我不确定如何。为什么不创建文件?
#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);..