我正在使用LINUX,和GCC一起编译,收到错误:警告:函数‘fopen_s’的隐式声明,有人能帮我解决这个问题吗? [英] I'm using Linux, compiling with gcc, getting error: warning: implicit declaration of function ‘fopen_s’, can someone help me fix this?
本文介绍了我正在使用LINUX,和GCC一起编译,收到错误:警告:函数‘fopen_s’的隐式声明,有人能帮我解决这个问题吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试用c编写一个简单的边缘检测程序。我使用的是Red Hat Enterprise Linux Server7.7(Maipo)和GCC 4.8.5版。
这是代码的开始:
#include <stdio.h>
#define size 200
int _tmain(int argc, _TCHAR* argv[])
{
char filein[size] = "./image.bmp";
FILE *fin;
fopen_s(&fin, filein, "rb");
return 0;
}
最初,我使用_TCHAR*有很多问题,所以最终我只用char替换了它,我不知道以后这是否会有问题,但至少它经过了编译并消除了那些错误。现在我收到了隐含的声明警告。我已尝试通过添加其他#Include来修复它。
我已尝试使用:
修复它#include <stdio.h>
#include <errno.h>
#include <string.h>
#define size 200
int main(int argc, char* argv[])
{
char filein[size] = "./image.bmp";
FILE *fin;
fopen_s(&fin, filein, "rb");
return 0;
}
但是,我仍然收到同样的警告,有人能告诉我我做错了什么吗?
谢谢。
非常感谢,这个管用!
#include <stdio.h>
#define size 200
int main(int argc, char* argv[])
{
char filein[size] = "./image.bmp";
FILE *fin;
fin = fopen(filein, "rb");
return 0;
}
推荐答案
_s
系列函数是C标准附件K中的可选函数,很少有任何C实现费心实现附件K。附件K中引入的&Safe&Quot;函数的实际用处很有争议;只需放弃这些函数,使用fopen
等标准函数。
我唯一一次遇到_s
函数是在为Windows编写的代码中,而Microsoft包含了它们自己的不符合附件K中所述标准的函数版本。
查看此处查看附件K的效用的研究:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1967.htm
他们的结论:
尽管最初的建议已经提出了十多年,ISO/IECTR 24731-1:2007批准了近十年,边界检查接口引入C标准也已经近五年了,但仍然没有出现任何可行的符合标准的实现。API仍然存在争议,实施者继续拒绝实现请求。边界检查接口的设计虽然用心良苦,但问题太多,无法纠正。与依赖现有的方法或现代技术相比,使用API被认为会导致质量更差、安全性更差的软件。更有效、侵入性更小的方法已经变得司空见惯,用户和安全专家通常都更喜欢这种方法。
因此,我们建议要么从C标准的下一个修订版本中删除附件K,要么弃用后再删除。
这篇关于我正在使用LINUX,和GCC一起编译,收到错误:警告:函数‘fopen_s’的隐式声明,有人能帮我解决这个问题吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文