程序总是最终退出。我似乎经常遇到这个问题,我想我以前以某种方式修复了它,但我不确定如何。为什么不创建文件?
#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;
}
答案 0 :(得分: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这是一个很棒的功能,只是因为返回问题的描述而不是错误代码。
答案 1 :(得分:1)
我打赌问题是“fgets()实际名称后的隐形字符”。我会让你弄清楚这个角色究竟是什么,来自哪里以及如何修复它,因为“努力解决问题”是编程时学习过程的一部分。如果这很容易,每个人都可以做到。
答案 2 :(得分:0)
如果fopen
的返回值为NULL,则表示发生了一些错误。我建议你查看errno
全局,看看发生了什么错误,以帮助你调试它没有打开文件的原因。
w
标志执行以下操作:
写:为输出操作创建一个空文件。如果已存在同名文件,则会丢弃其内容,并将该文件视为新的空文件。
因此,它应该在不存在时创建文件,或者当文件存在时,覆盖其内容。
如果不这样做,你会遇到另一个问题,但是根据你提供的一些信息,很难说出它是什么。
答案 3 :(得分:-2)
使用 gets() 而不是 fgets()...它会起作用
。 . 获取(文件_w); . .