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...