1. 程式人生 > 程式設計 >關於vs strcpy_s()和strcat_s()用法探究

關於vs strcpy_s()和strcat_s()用法探究

在vs 2019版本中 如果使用 strcpy()與strcat() 都會警告

大意說這個 strcpy()因為空間分配的 這個函式不安全 不建議用這個函式

大意說這個 strcpy()因為空間分配的 這個函式不安全 不建議用這個函式,strcat()也是這樣。當然錯誤c4996完全可以通過程式碼 讓它不提示,但是它確實不安全 不如學習一下新函式的用法。

strcpy_s()

老的 strcpy(D,S)就是把S陣列複製給D,返回D。 但是S的空間比D大的話 這就會發生錯誤。

在這裡插入圖片描述

這就是這個函式的機理strcpy_s()具體

errno_t strcpy_s
( char *strDestination,size_t numberOfElements,const char *strSource );


簡單說strcpy_s(D,sizeof(S)+1,S) 把S複製給D 把S的大小也給D 返回D.

strcat_s

老的機理strcat()

在這裡插入圖片描述

新的用法

strcat_s(A,sizeof(A)+sizeof(B)+1,B) 很好理解 空間一定是兩個陣列之和 再加一。

ps:下面給大家介紹下strcpy_s 和 strcat_s的用法

strcpy_s是系統的安全函式,微軟在2005後建議用一系統所謂安全的函式,這中間就有strcpy_s取代了strcpy,原來strcpy函式,就象gets函式一樣,它沒有方法來保證有效的緩衝區尺寸,所以它只能假定緩衝足夠大來容納要拷貝的字串。所以用strcpy_s代替,下面有一個使用strcpy_s的例子:

char source[] = "Hello world !";
char destination[20] = {0};
strcpy_s(destination,sizeof(destination)/sizeof(destination[0]),source);

strcpy_s是以位元組為單位的引數,它用來確認緩衝區大小。這允許strcpy_s函式可以進行執行時檢查,以確定寫入的字元沒有超過目標緩衝區的邊界。所以它比strcpy好用,我還知道其他系統安全函式是在本來函式的後面加上“_s”,還有個遺憾就是用visual c++6.0沒法編譯strcpy_s函式,可能是因為他太新吧

原型宣告:extern char *strcpy(char *dest,char *src);  

標頭檔案:string.h 

功能:把src所指由NUL結束的字串複製到dest所指的陣列中。

說明:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。  

返回指向dest的指標。

strcat_s脫胎於strcat,用於兩個字串的連結,strcat(str1,str2)直接返回新的str1.但在vs2005後,為了安全起見,重新添加了些功能和api和以前不同。比如strcat_s.為什麼是安全起見呢?對於老的你新增str2的時候如果st1溢位怎麼辦?很明顯這就是需要改進的地方。所以新的strcat_s規定,有三個引數,必須指定str1的大小。所以應該這麼來

 char string[20]="123";
 strcat_s(string,sizeof(string),"456");
 printf("%s",string);這樣20個元素,足夠裝下123456了。

原型  extern char *strcat(char *dest,char *src);用法  #include <string.h>  

在C++中,則存在於<cstring>標頭檔案中。

功能  把src所指字串新增到dest結尾處(覆蓋dest結尾處的'\0')並新增'\0'。

說明  src和dest所指記憶體區域不可以重疊且dest必須有足

夠的空間來容納src的字串。   

返回指向dest的指標。

總結

到此這篇關於關於vs strcpy_s()strcat_s()用法的文章就介紹到這了,更多相關vs strcpy_s()strcat_s()用法內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!