C語言面試題之字串操作

2021-07-27 04:57:26 字數 1260 閱讀 7057

找錯void test1()

答:string 大小不夠 str1末尾還有乙個'\0'

void test2()

strcpy(string, str1);

}答:字串沒有加』\0』,雖然兩個字元陣列一樣的大,但是沒有考慮字串後面的『\0,』導致程式出錯

void test3(char* str1)

}答:對試題3,if(strlen(str1) <= 10) 應改為

if(strlen(str1) < 10),因為strlen的結果未統計'\0'所

占用的1個位元組。

當沒有給字串留

'\0'

的位置時候會出現的奇怪錯誤 

intm; 

char

n[6]; 

scanf(

"%d|"

,&m); 

printf(

"%d\n"

,m); 

scanf(

"%[0-9]|"

,n);  

printf(

"%d %s"

,m,n);  

以上**當輸入 1|600000|時候會輸出  

1  0 600000

你會發現第乙個引數的值變了。這是為什麼麼呢?當將第二個引數如下宣告就會錯誤消失  

char

n[7];    

(ps必須留乙個位置給'\0'要不然會出現奇怪的錯誤)

我的理解是

'\0'

不夠造成的記憶體溢位,而這兩個記憶體單元正好是連續的。

'\0'

賦值到了m上和

'\0'

的ascll碼值剛好是0;  

因此我們來做乙個實驗,我們用最開始的那段**,即n只有6個記憶體單元  

這時候我們輸入  1|6000001|時候會輸出  

1  49 6000001  

可以發現第乙個引數的值變成了49;這恰好是ascll碼上1的值;這當然不是巧合。你可以試試別的引數。當然如果你的第二個引數輸個10位長度那麼這會更加明顯。  

這也就是為什麼我們公司要寫那麼多巨集定義像如下一樣的,在定義時就預留了

'\0'

的位置。就是為了防止我的小白的錯誤。 

typedef

char 

n[7]; 

剖析:考查對基本功的掌握:

(1)字串以'\0'結尾;

(2)對陣列越界把握的敏感度;

(3)庫函式strcpy的工作方式

C 面試題 之字串

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

字串操作 面試題總結

cpp view plain copy print?include include include include include using namespace std 題目 輸入乙個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣...

筆試面試題之字串

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