silver6|25九月,200609:07
本文的寫作目的並不在於提供C/C++程序員求職面試指導,而旨在從技術上分析面試題的內涵。文中的大多數面試題來自各大論壇,部分試題解答也參考了網友的意見。
許多面試題看似簡單,卻需要深厚的基本功才能給出完美的解答。企業要求面試者寫一個最簡單的strcpy函數都可看出面試者在技術上究竟達到了怎樣的程度,我們能真正寫好一個strcpy函數嗎?我們都覺得自己能,可是我們寫出的strcpy很可能只能拿到10分中的2分。讀者可從本文看到strcpy函數從2分到10分解答的例子,看看自己屬於什麼樣的層次。此外,還有一些面試題考查面試者敏捷的思維能力。
分析這些面試題,本身包含很強的趣味性;而作為一名研發人員,通過對這些面試題的深入剖析則可進一步增強自身的內功。
2.找錯題
試題1:
voidtest1()
{
charstring[10];
char*str1="0123456789";
strcpy(string,str1);
}
試題2:
voidtest2()
{
charstring[10],str1[10];
inti;
for(i=0;i<10;i++)
{
str1[i]=a;
}
strcpy(string,str1);
}
試題3:
voidtest3(char*str1)
{
charstring[10];
if(strlen(str1)<=10)
{
strcpy(string,str1);
}
}
解答:
試題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)字符串以’