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 讓它繞回開頭。