2016-08-02 78 views
-2

下面是一个简单的代码,我希望SIZE.txt被创建,然后被关闭。它编译没有错误,也没有警告,但文件不会被创建。但是,执行代码时会引发分段错误。简单的文本文件不会被创建[C,GCC]

感谢您提前给予的帮助。

#include "stdio.h" 

void main() { 
    FILE *fp; 
    fp = fopen("SIZE.txt", "r+"); 
    fclose(fp); 
    return; 
} 
+2

在尝试关闭它之前,您必须检查结果'fp!= NULL'。该文件可能不存在于您认为正在运行的路径上。 –

+5

手册页上显示*“r +”用于阅读和书写。该文件必须存在。*因此,当您说文件无法创建时:否,它不能。 –

+0

我的建议是'man fopen' – KevinDTimm

回答

1

的主要原因为:

#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; 
+0

您可能想要将失败的主要原因(*模式*)指定为“”r +“',这将只打开*现有*文件,而不是创建新文件。只有在指定''w +“',''a”'或''a +“'作为模式时才会创建一个文件 - 那么您的答案将会保证无效。欢迎来到S.O. –

+0

是的,你是对的,我应该指定我写的内容,下次我不会犯这个错误,我是新的堆栈,并感谢通知/关注 – Mike01

+0

好吧,我会保持我的目的 - 在你的目标上可以免费抄袭我的评论,将解释添加到您的答案中,这将是一个很好的教学案例,值得赞扬。 –

1

变化:

if ((fp = fopen("file.txt", "r")) == NULL) { 
    // Handle error... 
} 
+0

将''stdio.h“'更改为''。它返回NULL,'SIZE.txt'仍然缺失。 –

+0

SIZE.txt的路径是否正确? – Nunchy

+1

@MetinOktayYılmaz是的文件仍然缺失,你缺乏阅读评论的能力,更不用说手册页了。那么继续下去,还是需要链接FFS? –