下面是一个简单的代码,我希望SIZE.txt
被创建,然后被关闭。它编译没有错误,也没有警告,但文件不会被创建。但是,执行代码时会引发分段错误。简单的文本文件不会被创建[C,GCC]
感谢您提前给予的帮助。
#include "stdio.h"
void main() {
FILE *fp;
fp = fopen("SIZE.txt", "r+");
fclose(fp);
return;
}
下面是一个简单的代码,我希望SIZE.txt
被创建,然后被关闭。它编译没有错误,也没有警告,但文件不会被创建。但是,执行代码时会引发分段错误。简单的文本文件不会被创建[C,GCC]
感谢您提前给予的帮助。
#include "stdio.h"
void main() {
FILE *fp;
fp = fopen("SIZE.txt", "r+");
fclose(fp);
return;
}
的主要原因为:
#include "stdio.h"
要
#include <stdio.h>
此外,检查一个NULL指针由fopen()函数返回失败是由于fi的规范乐模式作为"r+"
将只开放现有文件,不创建新文件。仅在"w+", "a"
或"a+"
被指定为文件模式时才创建文件。
检查这一点,如果文件存在这将是显示文件已经存在,但如果文件不存在,它会创建它,取决于你有什么要做的事情,在AB +你可以改变为w
FILE *fp;
fp = fopen("SIZE.txt", "r");
if(fp==NULL){
fp=fopen("SIZE.txt", "ab+");
printf("File was created\n");
}
else{
printf("File already exists\n");
}
fclose(fp);
return 0;
您可能想要将失败的主要原因(*模式*)指定为“”r +“',这将只打开*现有*文件,而不是创建新文件。只有在指定''w +“',''a”'或''a +“'作为模式时才会创建一个文件 - 那么您的答案将会保证无效。欢迎来到S.O. –
是的,你是对的,我应该指定我写的内容,下次我不会犯这个错误,我是新的堆栈,并感谢通知/关注 – Mike01
好吧,我会保持我的目的 - 在你的目标上可以免费抄袭我的评论,将解释添加到您的答案中,这将是一个很好的教学案例,值得赞扬。 –
变化:
if ((fp = fopen("file.txt", "r")) == NULL) {
// Handle error...
}
将''stdio.h“'更改为'
SIZE.txt的路径是否正确? – Nunchy
@MetinOktayYılmaz是的文件仍然缺失,你缺乏阅读评论的能力,更不用说手册页了。那么继续下去,还是需要链接FFS? –
在尝试关闭它之前,您必须检查结果'fp!= NULL'。该文件可能不存在于您认为正在运行的路径上。 –
手册页上显示*“r +”用于阅读和书写。该文件必须存在。*因此,当您说文件无法创建时:否,它不能。 –
我的建议是'man fopen' – KevinDTimm