經典C面試題

2021-11-04 08:13:17 字數 3522 閱讀 9080

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 區域性變數能否和全域性變數重名?答 能,區域性會遮蔽全域性。要用全域性變數,需要使用 區域性變數可以與全域性變數同名,在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。對於有些編譯器而言,在同乙個函式內可以定義多個同名的區域性變數,比如在兩個迴圈體內都定義乙個同名的區域性變數...