';fopen&x27;返回空文件指针,即使文件是使用C创建的

';fopen&x27;返回空文件指针,即使文件是使用C创建的,c,fopen,null-pointer,C,Fopen,Null Pointer,我正在使用以下代码以写模式打开文件: FILE *pf = fopen("c:\\test.txt", "w"); if (NULL == pf) { printf("File pointer is NULL"); } 有时文件被创建了,我得到了正确的文件指针,但有时我得到了日志“文件指针为空”,即使文件是在C驱动器上创建的。我怎样才能修好它?: 空指针值表示错误 在现代windows中,在驱动器C的根目录下创建文件需要管理权限 您能否在安全位置(例如在GetTempPath函数返回的

我正在使用以下代码以写模式打开文件:

FILE *pf = fopen("c:\\test.txt", "w");
if (NULL == pf)
{
    printf("File pointer is NULL");
}
有时文件被创建了,我得到了正确的文件指针,但有时我得到了日志“文件指针为空”,即使文件是在C驱动器上创建的。我怎样才能修好它?

空指针值表示错误

在现代windows中,在驱动器C的根目录下创建文件需要管理权限

您能否在安全位置(例如在GetTempPath函数返回的临时目录中)重现相同的行为

如果发生错误,将设置全局变量errno,并可使用该变量 获取特定的错误信息

检查“errno”值。它应该包含类似于EACCESEPERM的内容

你说:

…即使文件是在c驱动器中创建的


我猜这个文件仍然是以前在admin下成功运行的一个文件。检查创建时间戳。

尝试打印
strerror(errno)
,这可能会提示
fopen
失败的原因。使用文件后必须
fclose()
。您运行的是什么版本的Windows?在驱动器的根目录中创建文件有点不寻常。通常,您希望在自己的用户文件夹中的某个位置执行此操作,以确保具有适当的权限。您需要管理员权限才能写入C:\。你是以管理员用户的身份运行吗?我认为这对你很有帮助。哇!我欣赏你在MSDN.Andrejs上指向POSIX函数手册的幽默感。最初的问题是特定于Windows的。到目前为止,在这里看不到任何特定于Windows的内容。我得到的错误号为“0”,但即使在该文件指针为NULL之后&我验证了文件的时间戳,它也会在每次运行后创建。仍然面临同样的问题&FYI这个问题出现在windows系统上。嗯,在我的机器(Win7)上,当我尝试在c:\\\:file*pf=fopen(“c:\\test.txt”,“w”)中创建文件时,会出现错误;如果(NULL==pf){printf(“文件指针为NULL%d%s\n”,errno,errno==EACCES?”EACCES:“);}输出:文件指针为NULL 13 EACCES