通過strcpy函式實現看c語言的功力

2021-10-05 08:21:54 字數 1400 閱讀 1809

企業要求面試者寫乙個最簡單的strcpy函式都可看出面試者在技術上究竟達到了怎樣的程度,

我們能真正寫好乙個strcpy函式嗎?我們都覺得自己能,可是我們寫出的strcpy很可能只能拿到10分中的2分。讀者可從本文看到strcpy 函式從2分到10分解答的例子,看看自己屬於什麼樣的層次。此外,還有一些面試題考查面試者敏捷的思維能力。分析這些面試題,本身包含很強的趣味性;而作為一名研發人員,通過對這些面試題的深入剖析則可進一步增強自身的內功。

試題1:

void test1()

答案:strcpy會導致陣列越界

試題2:

void test2()

strcpy( string, str1 );

}答案:複製位元組數不確定

試題3:

void test3(char* str1)

}答案:應改為

if(strlen(str1)<10),因為strlen的結果未統計所占用的1個位元組。

解答:

試題1字串str1需要11個位元組才能存放下(包括末尾的』』),而string只有10個位元組的空間,strcpy會導致陣列越界;

對試題2,如果面試者指出字元陣列str1不能在陣列內結束可以給3分;

如果面試者指出strcpy(string, str1)呼叫使得從str1記憶體起複製到string記憶體起所複製的位元組數具有不確定性可以給7分,在此基礎上指出庫函式strcpy工作方式的給10 分;

對試題3,if(strlen(str1) <= 10)應改為if(strlen(str1) < 10),因為strlen的結果未統計』』所占用的1個位元組。

剖析:考查對基本功的掌握:

(1)字串以』\0』結尾;

(2)對陣列越界把握的敏感度;

(3)庫函式strcpy的工作方式,如果編寫乙個標準strcpy函式的總分值為10,下面給出幾個不同得分的答案:

root@codemanager01:/home/maokx/learn/c++/strcpy# 

2分void strcpy( char *strdest, char *strsrc )

4分void strcpy( char *strdest, const char *strsrc )

//將源字串加const,表明其為輸入引數,加2分

7分void strcpy(char *strdest, const char *strsrc)

10分//為了實現鏈式操作,將目的位址返回,加3分!

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

從2分到10分的幾個答案我們可以清楚的看到,小小的strcpy竟然暗藏著這麼多玄機,真不是蓋的!需要多麼紮實的基本功才能寫乙個完美的strcpy啊! 

C 實現strcpy函式

strcpy函式的原型是 char strcpy char strdest,const char strsrc 其中strdest 是目的字串,strsrc 是源字串。不呼叫c c 的字串庫函式,編寫函式 strcpy char strcpy char strdest,const char strs...

實現C庫函式strcpy

原型宣告 char strcpy char dst,const char src strcpy 實現沒有檢查dst和src記憶體重疊問題 char strcpy char dst,const char src const約束,內容不可變 return pstr 返回dst,允許鏈式表示式 檢查記憶體...

strcpy函式實現

已知strcpy函式的原型是 char strcpy char strdest,const char strsrc 不呼叫 庫函式,實現strcpy函式。解釋為什麼要返回char 解說 strcpy的實現 char strcpy char strdest,const char strsrc 錯誤的做...