C語言基礎

char s[10] = "hello";
printf("%zu %zu\n", strlen(s), sizeof s);

關於放入字串的 char 陣列,執行上方程式碼時的輸出,下列何者正確?

  1. A5 10
  2. B6 10
  3. C10 10
查看答案與解析

正確答案:A. 5 10

C語言的字串是在字元序列的最後放上結尾字元 '\0' 的東西。strlen 從開頭數到 '\0' 之前的字元數,因此 "hello" 為5。sizeof s 是整個陣列 s 的大小,即宣告的元素數10位元組(其餘元素放入0)。若像 char s[] = "hello"; 這樣省略元素數,就會成為包含 '\0' 的6位元組陣列。

  • A. 正確。strlen 不計算結尾的 '\0' 而為5,sizeof 是陣列的10位元組。
  • B. strlen 不計算結尾的 '\0',因此是5而不是6。
  • C. strlen 回傳的不是陣列的大小,而是 '\0' 之前的字元數。
練習這個領域 前往領域頁面

C語言基礎的其他題目

  1. 在上方的宣告之後,寫入甲「p = t;」、乙「*p = 'x';」、丙「q = t;」、丁「*q = 'x';」其中之一。會發生編譯錯誤的組合為下列何者?
  2. 執行上方使用函式指標陣列的程式時的輸出,下列何者正確?
  3. fill 與 use 是另外定義的函式。上方函式的問題點,下列何者正確?
  4. 關於上方函式 make 所回傳的指標,下列何者正確?
  5. C語言中,建議在 free(p); 之後立刻寫 p = NULL; 的理由,下列何者最適當?