strcpy函式與memcpy函式

2021-05-23 15:10:47 字數 2737 閱讀 2495

strcpy函式與memcpy函式

6.2  字串與陣列

字串一般是用字元陣列的方式儲存,例如下面的str定義:

char str = "123456";

這裡str是乙個字元陣列,它存放了乙個字串"123456",由於字串還有乙個結束符"/0",所以此陣列的長度為7而不是6。

6.2.1  strcpy函式與memcpy函式

strcpy和memcpy都是標準c庫函式,它們有下面的特點。

strcpy提供了字串的複製。即strcpy只用於字串複製,並且它不僅複製字串內容之外,還會複製字串的結束符。

memcpy提供了一般記憶體的複製。即memcpy對於需要複製的內容沒有限制,因此用途更廣。

面試例題5:程式設計實現strcpy函式。

考點:字串複製的實現。

出現頻率:★★★★

已知strcpy函式的原型是:

char * strcpy(char * strdest,const char * strsrc);

要求如下。

(1)不呼叫庫函式,實現strcpy函式;

(2)解釋為什麼要返回char *。

解析程式**如下:

1    #include 

23    char * strcpy(char * strdest, const char * strsrc) // 實現strsrc到strdest的複製

4   

9        char *strdestcopy = strdest;        //儲存目標字串的首位址

10       while ((*strdest++ = *strsrc++)!='/0'); //把strsrc字串的內容複製到strdest下

11  

12       return strdestcopy;

13   }

14  

15   int getstrlen(const char *strsrc)         //實現獲取strsrc字串的長度

16  

22  

23       return len;

24   };

25  

26   int main()

27  

(1)strcpy函式的實現說明。

**第5~第7行判斷傳入的引數strdest和strsrc是否為null,如果是則返回null。

**第9行把strdest的值儲存到strdestcopy指標中。

**第10行對strsrc和strdest兩個指標進行迴圈移動,並不斷複製strsrc記憶體的值到strdest記憶體中。

由於已經儲存了strdest指標的值,因此這裡只需返回strdestcopy的值,而函式呼叫完後返回的就是strdest的值。

(2)strcpy函式返回char *型別的原因是為了能使用鏈式表示式。首先呼叫strcpy使得strdest指標複製strsrc的記憶體資料,然後呼叫getstrlen函式獲取strdest字串的長度。這樣不僅呼叫方便,而且程式結構簡潔明瞭。程式的輸出結果如下:

strdest: hello world!

length of strdest: 12

面試例題6:程式設計實現memcpy函式。

考點:記憶體複製的實現。

出現頻率:★★★★

答案程式**如下所示:

1    #include 

2    #include

3   

4    void *memcpy2(void *memto, const void *memfrom, size_t size)

5   

15  

16   int main()

17  

memcpy的實現如下。

與strcpy不同,memcpy用引數size決定複製多少個字元(strcpy遇到結束符"/0"結束)。由於在主程式中只複製了strsrc的前4個字元(**第22行),程式輸出如下:

strdest: hell

面試例題7:strcpy與memcpy的區別。

考點:字串複製與記憶體複製之間的區別。

出現頻率:★★★★

解析strcpy和memcpy主要有以下3方面的區別。

複製的內容不同。strcpy只能複製字串,而memcpy可以複製任意內容,例如字元陣列、整型、結構體、類等。

複製的方法不同。strcpy不需要指定長度,它遇到字串結束符"/0"便結束。memcpy則是根據其第3個引數決定複製的長度。

用途不同。通常在複製字串時用strcpy,而需要複製其他型別資料時則一般用memcpy。

資料2:

strcpy函式的原型:

char *strcpy(char *strdest, const char *strsrc)

資料3:

已知strcpy函式的原型是

char* strcpy(char* strdest,const char* strsrc);

1.不呼叫庫函式,實現strcpy函式

2.解釋為什麼要返回char*;

1.strcpy的實現**

char* strcpy(char* strdest,const char* strsrc)

strcpy函式與memcpy函式

strcpy函式與memcpy函式 6.2 字串與陣列 字串一般是用字元陣列的方式儲存,例如下面的str定義 char str 123456 這裡str是乙個字元陣列,它存放了乙個字串 123456 由於字串還有乙個結束符 0 所以此陣列的長度為7而不是6。6.2.1 strcpy函式與memcpy...

strcpy函式與memcpy函式(區別及實現 )

6.2 字串與陣列 字串一般是用字元陣列的方式儲存,例如下面的str定義 char str 123456 這裡str是乙個字元陣列,它存放了乙個字串 123456 由於字串還有乙個結束符 0 所以此陣列的長度為7而不是6。6.2.1 strcpy函式與memcpy函式 strcpy和memcpy都是...

關於strcpy與memcpy函式的位址重疊問題

大家一般認為名不見經傳strcpy函式實現不是很難,流行的strcpy函式寫法是 cpp view plain copy char my strcpy char dst,const char src 如果注意到 1,檢查指標有效性 2,返回目的指標des 3,源字串的末尾 0 需要拷貝。寫出上面實現...