繁体   English   中英

尝试写入文件时 fprintf 不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM