今
找錯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那麼子串行就一直向後擴充套件,否則丟棄之前的子串行開始新的子串行,同時我們要記下各個子...