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 #include23 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 #include2 #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 需要拷貝。寫出上面實現...