用c/c++實現strncpy函數

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;
}

 運行結果截圖如下:

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章