字串 · 複習測驗

10 題涵蓋 本質/'\0'、遍歷、=/== 與 strcmp、緩衝區溢位、ctype · 達 90% 放行
尚未作答
作答後按交卷自動算正確率:≥ 90% 過關;未達則回 Quizlet / 講義 複習再測。每題交卷後顯示正解與解析。

Q1C 語言的字串本質是?概念

char 陣列 + '\0'。C 沒有內建字串型態,靠結尾的空字元 '\0' 標記字串結束。

Q2"Hello"(5 個字元)在記憶體佔幾 bytes?概念

6。5 個字元 + 1 個結尾 '\0' = 6 bytes。

Q3char s[]="abc"; s[1]='x'; printf("%s", s); 印?預測輸出

axc。s[1] 由 'b' 改成 'x',其餘不變。

Q4char a[]="cat", b[]="cat"; if(a==b) 為何不會印 same?抓 bug

== 比位址。a、b 是兩個獨立陣列、起始位址不同,所以 a==b 永遠為假。比內容要用 strcmp。

Q5判斷兩字串「內容」相同,正確寫法是?概念

strcmp(a,b)==0。strcmp 回 0 代表內容相同。C 沒有 .equals(那是 Java)。

Q6遍歷字串、走到結尾就停的標準條件是?概念

s[i] != '\0'。碰到結尾的空字元就停,是走訪字串的標準寫法。

Q7scanf("%s", s)fgets 的差別(選最正確)?概念

scanf 遇空格停且會溢位;fgets 讀整行、限長度較安全(但含 '\n')。

Q8緩衝區溢位(buffer overflow)的成因是?安全

寫超出陣列大小。輸入過長覆蓋鄰近記憶體,是經典攻擊手法。用 fgets 或 scanf("%7s") 限長度。

Q9strcmp("abc", "abd") 的回傳值是?預測輸出

小於 0。前兩字元相同,第三個 'c'(99) < 'd'(100),所以回負值。

Q10(c-'a'+k)%26+'a''z' 往後位移 2,得到?預測輸出

'b'。'z'-'a'=25,25+2=27,27%26=1,1+'a'='b'。% 26 讓它繞回開頭。