vs2008中为什么使用strcpy不安全而用strcpy_s替换(尽量详细点)
答案:2 悬赏:0 手机版
解决时间 2021-04-27 02:03
- 提问者网友:萌卜娃娃
- 2021-04-26 03:52
vs2008中为什么使用strcpy不安全而用strcpy_s替换(尽量详细点)
最佳答案
- 五星知识达人网友:刀戟声无边
- 2021-04-26 05:22
strcpy_s 函式是 strcpy 的安全版本,属于 ISO/IEC TR 24731 的标准, 某些 C 函式库支援这个函式,包含 Microsoft C Runtime Library(微软 C 语言执行时期函式库)。它与 strcpy 的不同在于,在它取得额外参数来决定目的缓冲区大小时,会因为发生溢位而出现错误,如此一来,就可以预防缓冲区溢位。由于 strcpy_s 对于 C 语言来说是新的函式,所以没有特别受到广泛支援。
例如, 我们有个数组: unsigned char buf[2];
当我们使用strcpy(buf, "1234567")时, 以buf为起点的*(buf+3)也就是buf[3]被写入值, 但是, 此时也许这个buf+3这个位置被其它的程序或变量使用时, 则会改变其它变量的值.
而strcpy_s(buf,2,"1234567")则告诉程序它只有两个字节, 此时, 程序不会将数据写入到 buf+3的地址中, 所以它更安全.
例如, 我们有个数组: unsigned char buf[2];
当我们使用strcpy(buf, "1234567")时, 以buf为起点的*(buf+3)也就是buf[3]被写入值, 但是, 此时也许这个buf+3这个位置被其它的程序或变量使用时, 则会改变其它变量的值.
而strcpy_s(buf,2,"1234567")则告诉程序它只有两个字节, 此时, 程序不会将数据写入到 buf+3的地址中, 所以它更安全.
全部回答
- 1楼网友:山君与见山
- 2021-04-26 06:01
原型声明:extern char *strcpy(char *dest,const char *src);
实际使用时,要求调用前预先申请dest指针的内存空间,但是可能此空间的长度小于src的长度。此函数在复制字符串时,将会从src开始,一直碰到NULL为止,这样在复制时就可能超出dest的范围,导致内存错误。
strcpy_s多了一个dest空间长度的参数,会控制复制字符串的过程,不会越界,因而这个函数是安全的。
实际使用时,要求调用前预先申请dest指针的内存空间,但是可能此空间的长度小于src的长度。此函数在复制字符串时,将会从src开始,一直碰到NULL为止,这样在复制时就可能超出dest的范围,导致内存错误。
strcpy_s多了一个dest空间长度的参数,会控制复制字符串的过程,不会越界,因而这个函数是安全的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯