在Ubuntu下未解决fopen_s问题

4

我想在Ubuntu下打开文件,因此我使用fopen_s函数。虽然像这里http://en.cppreference.com/w/c/io/fopen所述一样包含了#include <stdio.h>,但我收到了“函数没有在作用域中声明”的错误信息。请帮忙指出我的错误并告诉我如何运行它?

FILE *fp;
fopen_s(&fp, strFilename.c_str(), "rb");
if (fp == NULL){
    cout << "cannot open " << strFilename.c_str();
    return false;
}

fclose(fp);

你是否使用了 -std=c11 进行编译? - Mats Petersson
2
请注意,据我所知,此函数并非C++11标准的一部分,仅属于C11标准。 - Mats Petersson
2个回答

4

尝试使用fopen()函数

#ifdef __unix
#define fopen_s(pFile,filename,mode) ((*(pFile))=fopen((filename),  (mode)))==NULL
#endif

参考: 在GCC中有没有一种方法可以使用fopen_s(),或者至少建立一个关于它的#define?


这是一个关于如何在使用GCC编译器时使用fopen_s()函数的问题。该函数主要用于安全操作文件的开放方式。然而,GCC编译器并不完全支持这个函数。但是,你可以通过定义一些宏来模拟fopen_s()的行为。

2
在Linux上搜索glibc,发现没有证据表明fopen_s() 在Linux的glibc中有实现。
POSIX规范中找不到关于fopen_s()的提及。看起来像fopen_s()是一个非可移植的库函数,仅在Microsoft Windows中实现。

谢谢你的研究,我只是按照教程操作,但确实是在Windows上。有没有可能用不同的函数完全相同呢? - beginh
1
它是C11规范的一部分,位于第490页:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf(第588页有描述)。 显然,关于Linux上C11的实现程度,我不能发表评论。 - Mats Petersson
1
使用fopen()代替fopen_s()。我没有看到任何fopen_s()可以完成而fopen()不能完成的事情。 - Sam Varshavchik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接