編寫乙個標準strcpy函式 等C 問題

2021-06-22 11:09:30 字數 1970 閱讀 8975

如果編寫乙個標準strcpy函式 

總分值為10,下面給出幾個不同得分的答案:

2分 以下是引用片段:

void strcpy( char *strdest, char *strsrc )     

4分 以下是引用片段: 

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

7分 以下是引用片段: 

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

10分 以下是引用片段: 

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

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

從2分到10分的幾個答案我們可以清楚的看到,小小的strcpy竟然暗藏著這麼多玄機,真不是蓋的!需要多麼紮實的基本功才能寫乙個完美的strcpy啊!   (4)對strlen的掌握,它沒有包括字串末尾的'\0'。 

讀者看了不同分值的strcpy版本,應該也可以寫出乙個10分的strlen函式了,完美的版本為:

int strlen( const char *str ) //輸入引數const 以下是引用片段:  

試題4:以下是引用片段: 

void getmemory( char *p )    

void test( void )    

試題5:  以下是引用片段: 

char *getmemory( void )    

void test( void )    

試題6:以下是引用片段:

void getmemory( char **p, int num )    

void test( void )     

試題7:以下是引用片段: 

void test( void )    

解答:試題4傳入中getmemory( char *p )函式的形參為字串指標,在函式內部修改形參並不能真正的改變傳入形參的值,執行完   char *str = null;    getmemory( str ); 

後的str仍然為null;試題5中   char p = "hello world";   return p; 

的p陣列為函式內的區域性自動變數,在函式返回後,記憶體已經被釋放。這是許多程式設計師常犯的錯誤,其根源在於不理解變數的生存期。   試題6的getmemory避免了試題4的問題,傳入getmemory的引數為字串指標的指標,但是在getmemory中執行申請記憶體及賦值語句 tiffanybracelets   *p = (char *) malloc( num ); 

後未判斷記憶體是否申請成功,應加上:   if ( *p == null )    

試題7存在與試題6同樣的問題,在執行   char *str = (char *) malloc(100); 

後未進行記憶體是否申請成功的判斷;另外,在free(str)後未置str為空,導致可能變成乙個「野」指標,應加上:   str = null; 

試題6的test函式中也未對malloc的記憶體進行釋放。   剖析: 

試題4~7考查面試者對記憶體操作的理解程度,基本功紮實的面試者一般都能正確的回答其中50~60的錯誤。但是要完全解答正確,卻也絕非易事。  

軟體開發網 www.mscto.com   

對記憶體操作的考查主要集中在: 

(1)指標的理解; 

(2)變數的生存期及作用範圍; 

(3)良好的動態記憶體申請和釋放習慣。

再看看下面的一段程式有什麼錯誤: 

以下是引用片段: 

swap( int* p1,int* p2 )    

在swap函式中,p是乙個「野」指標,有可能指向系統區,導致程式執行的崩潰。在vc++中debug執行時提示錯誤「access violation」。該程式應該改為 以下是引用片段: 

swap( int* p1,int* p2 )  

編寫乙個mysleep函式

在這之前,我寫了有關於訊號的相關知識,我在裡面講到了兩個函式,分別是alarm和pause兩個函式,這兩個函式是幹嘛的呢,我在這裡再介紹一遍。呼叫alarm 函式可以設定乙個鬧鐘 也就是告訴核心在 seconds 秒之後給當前程序發 sigalrm 訊號,該訊號的預設處理動作是終止當前程序。這個函式...

每日一題 85 編寫strcpy函式

題目來自網路 題目 編寫strcpy函式。函式宣告 char strcpy char dest,const char src 說明 src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串 思路 直接拷貝吧,但是需要注意幾個問題,容易出錯。1 拷貝前需要把目的位址的首位址...

等乙個人,等乙個故事

埋下一座城 關了所有燈。你的夕陽 我的容顏 誰的三分之一年。搖曳在筆尖的舞姿 是聚光燈下最濃烈的一抹豔紅。我目送沿海的日落 緊抱乙個醉生夢死的枕頭 遊不出回憶卻學不會放手 怎麼走。用一根火柴燒一座蜃樓 借這場大雨讓自己逃走。躲在萬劫不復的街頭 微笑參透覆水難收。睫毛下的傷城路過了誰的風景誰的心。當掉...