大家用strcpy还是strcpy_S?后者是不是不能跨平台?

秋的红果实 2017-07-22 07:29:58
图标题所问

请问大家用的是哪种(带_S的安全函数还是原汁原味的)?

最近每天学习点C++,碰到strcpy不能在vs2013下通过编译,我学习C++原因之一就是想不过分依赖windows,也不知道这些带_S的安全函数是不是可以跨平台。
开始学习,把握方向很重要的,请大家指导
...全文
884 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-07-24
  • 打赏
  • 举报
回复
我使用strncpy
上山老人 2017-07-24
  • 打赏
  • 举报
回复
知道哪里不安全,就不怕,如果是大的项目,就自己再封装一下,没必要自己再从头撸一个。个人愚见:如果是跨平台,可以用宏区别一下
bravery36 2017-07-24
  • 打赏
  • 举报
回复
strcpy_s不跨平台, 而且作用没有人想像的大.一个好的逻辑应该是在参数检查时发现错误, 不然在strcpy_s那里弹窗了, 这个系统还是死得很难看, 比越界改数据只好了一点点
秋的红果实 2017-07-24
  • 打赏
  • 举报
回复
引用 7 楼 hdt 的回复:
[quote=引用 4 楼 From_TaiWan 的回复:] [quote=引用 2 楼 hdt 的回复:] 个人感觉不应该纠结于它, 自己写个strcpy也不是很难。
我说的是一类问题,不只是说着两个函数。我想知道_s函数是不是可以跨平台,还想知道,大家们都是用的什么,也就是大家都向哪个方向发展,还是windows下的多吗?[/quote] 所谓了解跨平台,不是指这些库函数,我相信这些_s,拿到别的平台下,99%可以通过编译。 你想跨平台,首先要了解不同系统间,文件操作,内存操作,进程调度等等。[/quote]关于跨平台,还需要哪些预备知识?比如跨到Linux
真相重于对错 2017-07-23
  • 打赏
  • 举报
回复
引用 4 楼 From_TaiWan 的回复:
[quote=引用 2 楼 hdt 的回复:] 个人感觉不应该纠结于它, 自己写个strcpy也不是很难。
我说的是一类问题,不只是说着两个函数。我想知道_s函数是不是可以跨平台,还想知道,大家们都是用的什么,也就是大家都向哪个方向发展,还是windows下的多吗?[/quote] 所谓了解跨平台,不是指这些库函数,我相信这些_s,拿到别的平台下,99%可以通过编译。 你想跨平台,首先要了解不同系统间,文件操作,内存操作,进程调度等等。
战在春秋 2017-07-23
  • 打赏
  • 举报
回复
引用
知道_s函数是不是可以跨平台
首先:_s函数是一个系列,之前说的情况是共性问题。 其次:确实是不安全,举个例子:
char a[5];  // 定义长度为5的字符数组
char b[] = "A string which is longer than 5 chars"; 
strcpy( a, b); //没有限制源字符串的大小,会造成缓冲区溢出
                    //以a[6]为起点的一段内存被写入值, 但是, 此时也许这个这段内存被其它的程序或变量使用时, 则会改变其它变量的值
                    //进而改变程序的逻辑,造成错误
strcpy_s( a, 5, b); //会对长度进行限制
对内存的越界访问有可能没有什么问题,取决于当时内存的分配情况。 但这是不安全的,常在河边走,总有鞋湿的时候。
秋的红果实 2017-07-22
  • 打赏
  • 举报
回复
还有,这些非安全的函数(如strcpy),真的有什么不安全吗?
秋的红果实 2017-07-22
  • 打赏
  • 举报
回复
引用 2 楼 hdt 的回复:
个人感觉不应该纠结于它, 自己写个strcpy也不是很难。
我说的是一类问题,不只是说着两个函数。我想知道_s函数是不是可以跨平台,还想知道,大家们都是用的什么,也就是大家都向哪个方向发展,还是windows下的多吗?
zy010101 2017-07-22
  • 打赏
  • 举报
回复
你可以在创建项目的时候,不要勾选安全开发周期检查,这样,标准库所提供的strcpy函数就可以使用了,scanf也可以使用了
真相重于对错 2017-07-22
  • 打赏
  • 举报
回复
个人感觉不应该纠结于它, 自己写个strcpy也不是很难。
战在春秋 2017-07-22
  • 打赏
  • 举报
回复
引用
是不是可以跨平台
strcpy 属于 ANSI C standard library function,如果强调可移植性,这个函数是 首选 除非只局限于Windows平台,否则不要使用strcpy_s。 如果想安全性和可移植性兼顾,实践中会自己定义对应的函数,或者借用第三方库 此类第三方库的例子: https://developer.gnome.org/glib/2.26/glib-String-Utility-Functions.html http://apr.apache.org/docs/apr/1.4/group__apr__strings.html 不限于我推荐的这两个,你也可以自己再找找。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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