为什么vs编译器里面很多函数都加_s

不修边幅的胖子 2015-06-10 12:56:03
在很多书上,看到很多函数例如:strcpy,fopen,fread等函数,在dev c++上编译无误,但是在vs2013上编译就会出错,错误说这些函数不安全,需要用strcpy_s,fopen_s等替代,我在网上查了下,这是个一个全新的函数,他能有效的解决数据溢出的问题,也找到了解决方法,关闭sdl(安全生命周期)和警告,这些函数就都能用了
于是我发现了几个问题
1:像这些加_s的函数,的确更方便,但是为什么dev cpp为什么不支持这些函数呢
2:这些加_S的函数是什么函数,是c++标准库内的函数么
3:以后开发到底是用哪一种函数啊,是_s还是不带_S的,个人感觉各有各的好处
4:如果我想在dev c++中也用_S这些函数,怎么用,我用了说找不到函数
5:SDL这个检查是c++规范标准里面的么
...全文
540 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2015-06-11
  • 打赏
  • 举报
回复
加了_s是后面改的,是更加安全的 比如strcpy,以前的版本不会检查字符串是否写了超过申请的大小,新的strcpy_s会要求多输入一个参数,就是字符串数组的大小,函数内部会检查是否越界
innerX 2015-06-11
  • 打赏
  • 举报
回复
我用的vs2013,可以通过设置解决这个问题。 我也用了几次ctime_s之类的,以为要重新学习新版本,后来才发现有解决方法。
赵4老师 2015-06-10
  • 打赏
  • 举报
回复
#pragma warning(disable:4996)
flyrack 2015-06-10
  • 打赏
  • 举报
回复
C/C++ 按规定是效率优先的 vs显然违反了C/C++程序员应该为自己的行为负责的原则
iyomumx 2015-06-10
  • 打赏
  • 举报
回复
1.因为gcc/glibc(目前)选择不支持这些函数 2.不是C++标准库的函数,是C11标准库的可选实现 3.C++用string,C用宏定义来使用替代函数,比如
#ifndef _MSC_VER
#define gets_s(buf, sz) fgets(buf, sz, stdin)
#endif
4.也可以使用一些第三方的库,比如http://sourceforge.net/projects/safeclib/ 5.不是
  • 打赏
  • 举报
回复
恩,如果我加SDL的话,vs2012根本有警告,也有错误,去掉的话错误消失啊
jiqiang01234 2015-06-10
  • 打赏
  • 举报
回复
“编译错误”和“编译警告”不是相同的概念,楼主需区分这两者的区别。 带s的函数是微软编译器自带的库,其他编译器配套的库没有。 带s的函数是微软自己对标准库的扩展,不能跨平台,甚至不能跨编译器

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧