【c++遇坑警告】strcpy_s函式的使用
阿新 • • 發佈:2018-12-20
一、函式原型
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()
方法,這種方法他只會複製字串真正長度到目標地址,不會複製結束符,這樣就無法知道什麼位置結束,所以複製時長度加一目的是把字串結束符也複製進去。