我們都知道 strcpy() 函數(shù)是字符串拷貝函數(shù),那么我們怎樣來模擬實現(xiàn)這個函數(shù)呢?!

首先,我們要明白,strcpy() 在拷貝字符串的時候是一個一個拷貝的,直到遇到字符串結(jié)束標志 '\0' 時才停止拷貝。所以,明白了這一點,我們就可一進行簡單的模擬實現(xiàn)了
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char *my_strcpy(char *str1, const char *str2)
{
assert(str1);
assert(str2);
while(*str1 != '\0') //目標地址遇到'\0'結(jié)束
{
*str1 = *str2;
str1++;
str2++;
}
//while(*str2 != '\0') //注意判斷條件一定不能這樣寫
//{
// *str1 = *str2;
// str1++;
// str2++;
//}
return str1;
}
int main()
{
char str[10]; //目標地址一定要是一個字符數(shù)組
char *pa = "abcdef";
my_strcpy(str,pa);
printf("%s\n",str);
system("pause");
return 0;
}由于目標地址是沒有初始化的一個字符數(shù)組,它里邊存的內(nèi)容我們是不知道的,并且在拷貝的過程中它會連同 *pa 中的 '\0' 一塊拷貝,所以 while 條件句中的判斷是 *str1 != '\0' ,如果判斷錯誤即寫為 *str2 != '\0' ,那么就會得到以下結(jié)果。

關(guān)于 my_strcpy() 函數(shù)模擬實現(xiàn)的幾點要求:
1.拷貝時是連同字符串中的 '\0' 一塊拷貝的;
2.函數(shù)實參的設(shè)定:原字符串前要加 const 保護;
3.函數(shù)的返回值類型要是 char* 類型(便于鏈式訪問);
4.進入函數(shù)內(nèi)部,要對兩個指針進行斷言,判斷指針是否為空;
5.函數(shù)要返回一個值(地址);
6.一定要進行優(yōu)化
最優(yōu)化代碼:
char *my_strcpy(char *str1, const char *str2)
{
assert(str1);
assert(str2);
while(*str1++ = *str2++)
{
;
}
return str1;
}創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。
本文標題:“strcpy”模擬的實現(xiàn)-創(chuàng)新互聯(lián)
當前URL:http://www.chinadenli.net/article18/diohgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、靜態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站、網(wǎng)站內(nèi)鏈、軟件開發(fā)、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容