1. 找錯題
void test1()
string只能容納9個字元,複製的時候會越界
2. 找錯題
void test2()
strcpy( string, str1 );
}由於在陣列str1內沒有』\n』,所以複製的長度不確定,導致string結束不確定。
3.找錯題
void test3(char* str1)
}strlen(str1)<10,strlen統計字元的時候沒有計算\0
4.不呼叫c++/c的字串庫函式,請編寫函式 strcpy,其原型為
char *strcpy(char *strdest, const char *strsrc);
char *strcpy(char *strdest,const char *strsrc)
5. 不呼叫c++/c的字串庫函式,請編寫函式 strlen,其原型為
int strlen(const char *str)
6.找出錯誤
void *getmemory( char *p )
void test( void )
只為p分配了記憶體,str沒分配記憶體,仍為null
7.找出錯誤
char *getmemory( void )
void test( void )
返回的是棧內位址,函式結束後被釋放
8.找出錯誤
void getmemory( char **p, int num )
}void test( void )
記憶體沒有釋放,會造出記憶體洩露,沒有判斷記憶體是否申請成功。
9.找出錯誤
swap( int* p1,int* p2 )
指標p沒有初始化,是野指標,若指向系統區,會導致程式執行失敗。
10. 分別給出bool,int,float,指標變數與「零值」比較的 if 語句(假設變數名為var)
bool: if(!var)
int: if(var==0)
float: const float epsinon=0.00001;
if((var>-epsinon)&&(varif(var==null)
11. 以下為windows nt下的32位c++程式,請計算sizeof的值
void func ( char str[100] )
void *p = malloc( 100 );
sizeof ( p ) =4
陣列名作為形參時成為一維指標,佔4個位元組,但是不能自增自減運算,malloc返回的是首位址
12. 寫乙個「標準」巨集min,這個巨集輸入兩個引數並返回較小的乙個
錯誤:define min(a,b) (a)<=(b) ? (a) : (b)
define min(a,b) (a<=b ? a : b)
define min(a,b) ((a)<=(b) ? (a) : (b));
正確:define min(a,b) ((a)<=(b) ? (a) : (b))
***:
void main()
;int *p=aa;
int b=10,c;
c=min(*p++,b);
printf(「%d\n",c7
printf(「%d\n」,*p9
}13. #ifndef __incvxworksh
#define __incvxworksh
#endif
標頭檔案中的編譯巨集
防止標頭檔案被重複引用
14.編寫乙個函式,作用是把乙個char組成的字串迴圈
右移n個。比如原來是「abcdefghi」如果n=2,移位後應該
是「hiabcdefgh」
#include
#include
#define max_len 20
void move(char *str1,int step)
void main()
15. 請說出static和const關鍵字盡可能多的作用
static:(1)函式體內static變數的作用範圍為該函式體,不同於
auto變數,該變數的記憶體只被分配一次,因此其值在下次呼叫時仍維持上次的值;
2)在模組內的static全域性變數可以被模組內所用函式訪
問,但不能被模組外其它函式訪問;
3)在模組內的static函式只可被這一模組內的其它函式
呼叫,這個函式的使用範圍被限制在宣告它的模組內;
4)在類中的static成員變數屬於整個類所擁有,對類的
所有物件只有乙份拷貝;
5)在類中的static成員函式屬於整個類所擁有,這個函
數不接收this指標,因而只能訪問類的static成員變數。
const: (1)欲阻止乙個變數被改變,可以使用const關鍵字。在
定義該const變數時,通常需要對它進行初始化,因為以後就沒有機會再去改變它了;
2)對指標來說,可以指定指標本身為const,也可以指
定指標所指的資料為const,或二者同時指定為const;
3)在乙個函式宣告中,const可以修飾形參,表明它是
乙個輸入引數,在函式內部不能改變其值;
4)對於類的成員函式,若指定其為const型別,則表明
其是乙個常函式,不能修改類的成員變數;
5)對於類的成員函式,有時候必須指定其返回值為
const型別,以使得其返回值不為「左值」。
16. 請寫乙個c函式,若處理器是big_endian的,則返回0;若是little_endian的,則返回1
#include
#include
int checkendian()
d; d.a=1;
return (d.c);
}void main()
聯合體union的存放順序是所有成員都從低位址開始存放
17. 寫乙個函式返回1+2+3+…+n的值(假定結果不會超過長整型變數的範圍)
int sum(int n)
注意執行效率
18. 用預處理指令#define 宣告乙個常數,用以表明1年中有多少秒(忽
略閏年問題)
#define second_year (365*24*60*60)ul
19.#error的作用
#error命令可以簡單的使編譯器在發生錯誤時停止. 當遇到乙個#error時,編譯器會自動輸出行號而無論message的內容. 本命令大多是用於除錯.
20. 死迴圈
while(1最佳選擇
for語義不明
loop一般不用,可一次跳出多重迴圈
goto loop;
21.資料申明
a) 乙個整型數(an integer)
int a;
b) 乙個指向整型數的指標(a pointer to an integer)
int *a;
c) 乙個指向指標的的指標,它指向的指標是指向乙個整型數(apointer to a pointer to an integer)
int **a;
C 經典面試題
本試題僅用於考查c c程式設計師的基本程式設計技能。內容限於c c常用語法,不涉及資料結構 演算法以及深奧的語法。考試成績能反映出考生的程式設計質量以及對c c的理解程度,但不能反映考生的智力和軟體開發能力。筆試時間90分鐘。請考生認真答題,切勿輕視。一 請填寫bool float,指標變數與 零值...
C經典面試題
1.gets 函式 問 請找出下面 裡的問題 1.include 2.int main void 3.答 上面 裡的問題在於函式gets 的使用,這個函式從stdin接收乙個字串而不檢查它所複製的快取的容積,這可能會導致快取溢位。這裡推薦使用標準函式fgets 代替。2.strcpy 函式 問 下面...
C經典筆試面試題
1 區域性變數能否和全域性變數重名?答 能,區域性會遮蔽全域性。要用全域性變數,需要使用 區域性變數可以與全域性變數同名,在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。對於有些編譯器而言,在同乙個函式內可以定義多個同名的區域性變數,比如在兩個迴圈體內都定義乙個同名的區域性變數...