我正在使用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?

查看:5
本文介绍了我正在使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆