1. 程式人生 > >【c++遇坑警告】strcpy_s函式的使用

【c++遇坑警告】strcpy_s函式的使用

一、函式原型

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()方法,這種方法他只會複製字串真正長度到目標地址,不會複製結束符,這樣就無法知道什麼位置結束,所以複製時長度加一目的是把字串結束符也複製進去。