C 面試題之字串改錯

2021-10-09 09:08:38 字數 2285 閱讀 9155

1. 字串越界問題

void

test1()

錯誤分析:[c**可編譯過]

1)string不能作為變數使用,是c++中的string類庫;

2)str1是乙個指向字元的指標,字串所佔長度為11,strcpy函式是將

str1拷貝給string,但string大小只有10,str1大小為11,導致陣列越界。

void

test2()

strcpy

(str, str1)

;}

錯誤分析:[**不能編譯通過]

1)陣列名str1為char const型別的右值型別,不能賦值;

2)函式strcpy進行拷貝工作,strcpy會從源位址一直往後拷貝,

直到遇上第乙個『\0』為止。拷貝長度不確定如果一直未遇到』\0』導致陣列越界。*

//正確修改方式:

void

test2()

str[9]

='\0'

;strcpy

(str, str1)

;}

2. 寫出完整的strcpy函式
char

*strcpy

(char

* strdes,

const

char

* strsrc)

3. 字串指標
void

getmemory

(char

*p)void

test3()

錯誤分析:[執行結果為null]

1)傳入形參不能真正改變形參的值,執行完後仍為null;

2)在函式getmemory和test3中未對申請記憶體空間釋放,造成記憶體洩露。

//正確修改方式:

void

getmemory

(char

**p)

void

test3()

//下面**有什麼問題

char

*getmemory

(void

)void

test4

(void

)

錯誤分析:

1)區域性變數在函式執行完自動釋放

//正確修改方式:

char

*getmemory

(void

)

//下面**有什麼問題

void

getmemory

(char

**p,

int num)

void

test5()

錯誤分析:

1)未判斷記憶體是否申請成功;

2)未釋放堆記憶體;

3)修改printf(str)為printf("%s", str);

//正確修改方式:

void

getmemory

(char

**p,

int num)

}void

test5()

//下面**有什麼問題

void

test6

(void

)

錯誤分析:

1)未判斷記憶體是否申請成功;

2)未將釋放的堆記憶體置null;

//正確修改方式:

void

test6

(void

)free

(str)

; str =

null

;}

4. 野指標
swap

(int

* p1,

int*p2)

錯誤分析:

1)需要新增返回void;

2)在swap函式中p是乙個野指標,有可能指向系統區,導致程式執行崩潰*

//正確修改方式:

void

swap

(int

* p1,

int*p2)

C 面試題 之字串

基本上求職者進行筆試時沒有不考字串的。字串也是一種相對簡單的資料結構,容易引起面試官反 問。事實上,字串也是考驗 程式設計師程式設計規範和程式設計習慣的重要考點。不要忽視這些細節,因為這些細節會體現你在作業系統 軟體工程 邊界記憶體處理等方面的知識掌握能力,也會成為企業是否錄用你的參考因素。答案 i...

筆試面試題之字串

最大子串行 最大子串行是要找出由數組成的一維陣列中和最大的連續子串行。比如的最大子串行就是 它的和是8,達到最大 而 的最大子串行是,它的和是6。你已經看出來了,找最大子串行的方法很簡單,只要前i項的和還沒有小於0那麼子串行就一直向後擴充套件,否則丟棄之前的子串行開始新的子串行,同時我們要記下各個子...

C語言面試題之字串操作

今 找錯void test1 答 string 大小不夠 str1末尾還有乙個 0 void test2 strcpy string,str1 答 字串沒有加 0 雖然兩個字元陣列一樣的大,但是沒有考慮字串後面的 0,導致程式出錯 void test3 char str1 答 對試題3,if str...