strncpy函數介紹
1:strncpy是 C語言的庫函數之一,來自 C語言標準庫,定義於 string.h,char *strncpy(char *dest, const char *src, int n),把src所指向的字符串中以src地址開始的前n個字節複製到dest所指的數組中,並返回dest。
2:函數原型char *strncpy(char *dest,char *src,size_t n);
3:(c/c++)複製字符串src中的內容(字符,數字、漢字....)到字符串dest中,複製多少由size_t n的值決定。如果src的前n個字符不含NULL字符,則結果不會以NULL字符結束。如果n<src的長度,只是將src的前n個字符複製到dest的前n個字符,不自動添加'\0',也就是結果dest不包括'\0',需要再手動添加一個'\0'。如果src的長度小於n個字節,則以NULL填充dest直到複製完n個字節。src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符長度+'\0'。
4:strcpy只是複製字符串,但不限制複製的數量,很容易造成緩衝溢出。strncpy要安全一些。strncpy能夠選擇一段字符輸出,strcpy則不能。
5:具體代碼實現如下:
#include<iostream>
using namespace std;
char *my_strncpy(char *strDest, const char *strSrc, size_t n) //對源字符串不希望其修改,所以加上const來修飾
{
char *address = strDest;
if ( (NULL != strDest) && (NULL != strSrc) && (strDest != strSrc) && (0 < n) )
{
while( n-- && '\0'!=( *strDest++ = *strSrc++ ) )
{
// do nothing
}
}
*strDest='\0';
return address;
}
int main()
{
char *strSrc = "hello,world";
char *strDest = new char[20];
cout << strSrc << endl;
strDest = my_strncpy(strDest, strSrc, 5);
cout << strDest << endl;
strDest = my_strncpy(strDest, strSrc, 8);
cout << strDest << endl;
strDest = my_strncpy(strDest, strSrc, strlen(strSrc));
cout << strDest << endl;
return 0;
}
運行結果截圖如下: