strcpy及strcpy_s的问题

不羁的心 提交于 2019-11-26 16:37:23

参考:
C++中strcpy()函数和strcpy_s()函数的使用及注意事项

在对字符串进行拷贝赋值时

char *p = new char[5];
strcpy(p, "abcd");

会出现
在这里插入图片描述
说明编译器提醒’strcpy’方法是不安全的,原因是在字符串指针p是在堆中临时创建的空间,可能会存在内存溢出等问题,如果一定要使用该语句则需要在开头加上

#define _CRT_SECURE_NO_WARNINGS

或者使用建议使用的’strcpy_s’方法,在使用中发现

char *p = new char[5];
strcpy_s(p, "abcd");

会报错,原因是对于堆中创建的字符串指针,需要使用该方法的三参数版本

 _ACRTIMP errno_t __cdecl strcpy_s(
        _Out_writes_z_(_SizeInBytes) char*       _Destination,
        _In_                         rsize_t     _SizeInBytes,
        _In_z_                       char const* _Source
        );

char *p = new char[5];
strcpy_s(p,5, "abcd");

或者直接使用字符串数组

char p[5];
strcpy_s(p, "abcd");

但需要注意预先设定的字符串长度需要大于等于拷贝的字符串长度,否则程序崩溃。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!