您好,登錄后才能下訂單哦!
我們都知道 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é)果。
關于 my_strcpy() 函數(shù)模擬實現(xiàn)的幾點要求:
1.拷貝時是連同字符串中的 '\0' 一塊拷貝的;
2.函數(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; }
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。