自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

兩道出現(xiàn)頻率超高的C++筆試題

開發(fā) 后端
本文旨在從技術(shù)上分析C/C++程序員筆試題題的內(nèi)涵。文中所列舉的兩道筆試題頻繁出現(xiàn)在各種C++考試場合,本文即對這兩道筆試題進(jìn)行深入分析,希望對你能有所幫助。

  兩道出現(xiàn)頻率超高的C++筆試題

  已知strcpy函數(shù)的原型是:

  1. char * strcpy(char * strDest,const char * strSrc); 

  1.不調(diào)用庫函數(shù),實現(xiàn)strcpy函數(shù)。

  2.解釋為什么要返回char *。

  解說:

  1.strcpy的實現(xiàn)代碼

  1. char * strcpy(char * strDest,const char * strSrc)  
  2. {  
  3. if ((strDest==NULL)||(strSrc==NULL)) //[1]  
  4. throw "Invalid argument(s)"//[2]  
  5. char * strDestCopy=strDest; //[3]  
  6. while ((*strDest++=*strSrc++)!='\0'); //[4]  
  7. return strDestCopy;  

  錯誤的做法:

  [1]

  (A)不檢查指針的有效性,說明答題者不注重代碼的健壯性。

  (B)檢查指針的有效性時使用((!strDest)||(!strSrc))或(!(strDest&&strSrc)),說明答題者對C語言中類型的隱式轉(zhuǎn)換沒有深刻認(rèn)識。在本例中char *轉(zhuǎn)換為bool即是類型隱式轉(zhuǎn)換,這種功能雖然靈活,但更多的是導(dǎo)致出錯概率增大和維護(hù)成本升高。所以C++專門增加了bool、true、false三個關(guān)鍵字以提供更安全的條件表達(dá)式。

  (C)檢查指針的有效性時使用((strDest==0)||(strSrc==0)),說明答題者不知道使用常量的好處。直接使用字面常量(如本例中的0)會減少程序的可維護(hù)性。0雖然簡單,但程序中可能出現(xiàn)很多處對指針的檢查,萬一出現(xiàn)筆誤,編譯器不能發(fā)現(xiàn),生成的程序內(nèi)含邏輯錯誤,很難排除。而使用NULL代替0,如果出現(xiàn)拼寫錯誤,編譯器就會檢查出來。

  [2]

  (A)return new string("Invalid argument(s)");,說明答題者根本不知道返回值的用途,并且他對內(nèi)存泄漏也沒有警惕心。從函數(shù)中返回函數(shù)體內(nèi)分配的內(nèi)存是十分危險的做法,他把釋放內(nèi)存的義務(wù)拋給不知情的調(diào)用者,絕大多數(shù)情況下,調(diào)用者不會釋放內(nèi)存,這導(dǎo)致內(nèi)存泄漏。

  (B)return 0;,說明答題者沒有掌握異常機(jī)制。調(diào)用者有可能忘記檢查返回值,調(diào)用者還可能無法檢查返回值(見后面的鏈?zhǔn)奖磉_(dá)式)。妄想讓返回值肩負(fù)返回正確值和異常值的雙重功能,其結(jié)果往往是兩種功能都失效。應(yīng)該以拋出異常來代替返回值,這樣可以減輕調(diào)用者的負(fù)擔(dān)、使錯誤不會被忽略、增強(qiáng)程序的可維護(hù)性。

  [3]

  (A)忘記保存原始的strDest值,說明答題者邏輯思維不嚴(yán)密。

  [4]

  (A)循環(huán)寫成while (*strDest++=*strSrc++);,同[1](B)。

  (B)循環(huán)寫成while (*strSrc!='\0') *strDest++=*strSrc++;,說明答題者對邊界條件的檢查不力。循環(huán)體結(jié)束后,strDest字符串的末尾沒有正確地加上'\0'。

  2.返回strDest的原始值使函數(shù)能夠支持鏈?zhǔn)奖磉_(dá)式,增加了函數(shù)的“附加值”。同樣功能的函數(shù),如果能合理地提高的可用性,自然就更加理想。

  鏈?zhǔn)奖磉_(dá)式的形式如:

  1. int iLength=strlen(strcpy(strA,strB)); 

  又如:

  1. char * strA=strcpy(new char[10],strB); 

  返回strSrc的原始值是錯誤的。其一,源字符串肯定是已知的,返回它沒有意義。其二,不能支持形如第二例的表達(dá)式。其三,為了保護(hù)源字符串,形參用const限定strSrc所指的內(nèi)容,把const char *作為char *返回,類型不符,編譯報錯。

【編輯推薦】

  1. C++中的指針用法總結(jié)
  2. 如何成為一名C++程序員
  3. c++編程常用工具
  4. 給C++初學(xué)者的50個忠告
  5. c++最基礎(chǔ)的20條規(guī)則
責(zé)任編輯:韓亞珊 來源: 中國IT實驗室
相關(guān)推薦

2015-04-28 09:36:20

.NET頻率高筆試題

2009-10-10 15:36:00

CCNA考試題目CCNA

2021-10-27 11:00:30

C++語言面試

2011-03-30 09:26:20

c++程序員

2009-08-10 18:16:20

C#面試題

2011-08-11 17:39:25

Objective-C筆試題

2022-09-21 22:19:16

CSS面試題

2021-11-01 23:36:24

連續(xù)區(qū)間面試

2011-03-26 22:16:31

等考試題C++筆試試題

2010-01-28 15:45:35

C++老手

2011-04-11 16:42:25

C++等級考試

2024-04-28 09:26:40

RustRTTI二進(jìn)制

2009-08-20 15:54:48

從C#到C++

2015-04-07 14:05:13

前端阿里在線筆試題

2009-06-15 17:18:25

Java筆試題

2014-01-02 15:08:35

手游渠道IP

2010-01-21 09:34:57

C++語法

2010-01-27 16:05:06

C++堆棧

2010-01-21 14:07:14

CC++聲明

2010-08-11 11:32:57

谷歌筆試題谷歌筆試題
點贊
收藏

51CTO技術(shù)棧公眾號