[英]when trying to write file fprintf does not work
我只是想打开文件并在文件中写入一些东西,但是当 visual studio 尝试执行 fprintf 程序崩溃时,这里是我的代码
#include<stdlib.h>
int main()
{
FILE* fPointer;
fPointer = fopen_s(&fPointer,"C:\\asd.txt","w");
fprintf(fPointer, "If ı can read this then ı can create for loop");
fclose(fPointer);
return 0;
}
这是错误消息: Access violation writing location 0x0000003A.
fopen_s
返回值是一个错误号,你用你不应该做的覆盖你的文件指针。
与返回数据类型FILE *
的fopen
相比,function fopen_s
返回数据类型errno_t
。
在您发布的代码中,您将变量fPointer
的地址传递给 function fopen_s
,以便它写入该变量。 这是对的。 但是,之后,您将 function fopen_s
(属于errno_t
类型)的返回值显式分配给变量fPointer
,从而覆盖之前由 function fopen_s
写入该变量的内容。 不应这样做,因为数据类型errno_t
与数据类型FILE *
具有不同的含义。
此外,作为一般规则,您应该始终在使用FILE *
之前检查文件是否已成功打开。
因此,您应该将代码更改为如下所示:
#include <stdlib.h>
int main()
{
FILE* fPointer;
errno_t err;
err = fopen_s(&fPointer,"C:\\asd.txt","w");
if ( err == 0 )
{
fprintf(fPointer, "If ı can read this then ı can create for loop");
fclose(fPointer);
}
else
{
fprintf( stderr, "Error opening file!\n" );
}
return 0;
}
如果fopen_s
未能创建文件指针,则返回错误代码。 您必须在使用文件指针之前检查错误值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.