一、函数原型
这个函数可以在vs2017中使用,其他的没试过,但是linux的g++和windows的dev c++中是不能用的
ACRTIMP errno_t __cdecl strcpy_s(
_Out_writes_z_(_SizeInBytes) char* _Destination,
_In_ rsize_t _SizeInBytes,
_In_z_ char const* _Source
);
- 第一个参数
_Destination
是复制到哪里,目标地址,必须是char*类型。第二个参数_SizeInBytes
表示要复制多大内存(单位是字节)。第三个参数_Source
是从哪里复制,源地址,必须是char*
类型
二、填坑
- 特别注意第二个参数
_SizeInBytes
,应该是字符串长度加一,并且在申请_Destination
大小的时候,也应该申请_Source
长度加一,否则delete的时候就会出错。 - 具体原因:一般我们在求第二个参数的时候会使用类似这种
sizeof(char)*str.length()
方法,这种方法他只会复制字符串真正长度到目标地址,不会复制结束符,这样就无法知道什么位置结束,所以复制时长度加一目的是把字符串结束符也复制进去。