strcpy_s和strcpy()函數的功能幾乎是同樣的。strcpy函數,就象gets函數同樣,它沒有方法來保證有效的緩衝區尺寸,因此它只能假定緩衝足夠大來容納要拷貝的字符串。在程序運行時,這將致使不可預料的行爲。用strcpy_s就能夠避免這些不可預料的行爲。ios
這個函數用兩個參數、三個參數均可以,只要能夠保證緩衝區大小。ide
三個參數時:函數
errno_t strcpy_s( char *strDestination, size_t numberOfElements, const char *strSource );
兩個參數時:spa
errno_t strcpy_s( char (&strDestination)[size], const char *strSource ); // C++ only
Example:字符串
#include<iostream> #include<cstring> using namespace std; void test(){ char *str1=NULL; str1=new char[32]; char str[7]; strcpy_s(str1,20,"Hello C++"); //三個參數 strcpy_s(str,"Hello C++"); //兩個參數,但若是:char *str=new char[7];會出錯:提示不支持兩個參數。這是因爲你已經給str分配了空間,而沒有說明其讀寫的空間大小。 strcpy_s(str,_T("Hello C++")); //一樣會報:不支持兩個參數 cout<<"strlen(str1):"<<strlen(str1)<<endl<<"strlen(str):"<<strlen(str)<<endl; printf(str1); printf("\n"); cout<<str<<endl; } int main() { Test(); return 0; } 輸出爲: strlen(str1): 11 //另外要注意:strlen(str1)是計算字符串的長度,不包括字符串末尾的「\0」!!! strlen(str): 5 hello world hello }