3.下列 C/C++程式片段執行後,z 的值為何?
(A) 16
(B)24
(C) 32
(D) 40

答案:登入後查看
統計: A(20), B(54), C(141), D(36), E(0) #2978895

詳解 (共 4 筆)

#5581023

補充一下
假如說char s 沒有宣告[20] (沒有初始化大小) -> char s[]
那麼sizeof(s) 就會是13
因為若以字串的方式輸入陣列的話
編譯器會自動在尾巴加入空字元 '\0'

所以會等同於這樣 :
char s[] = {'C', 'h', 'i', 'n', 'a', 'S', 't', 'e', 'e', 'l', 'C', 'o', '\0'}

然而 C庫函數 strlen(const char *str) 是計算字符串str的長度,但不包括終止空字符

所以i = strlen(s) 為12,j = sizeof(s) 為13
 632bf2911690b.jpg


12
0
#5584225
sizeof是取得變數所佔的位元組大小....
(共 56 字,隱藏中)
前往觀看
10
0
#6128315

解釋各個變數的值

  1. s

    • 這是一個長度為 20 的字元陣列,其中包含字串 "ChinaSteelCo"。
    • 字串 "ChinaSteelCo" 包含 12 個字元,加上結尾的空字元(\0),總共佔 13 個字元。
  2. i = strlen(s)

    • 函式 strlen(s) 返回字串 s 的長度,不包括結尾的空字元(\0)。
    • 因此,i 的值是 12。
  3. j = sizeof(s)

    • 運算子 sizeof(s) 返回陣列 s 的總大小,單位是位元組。
    • 因為 s 是一個長度為 20 的字元陣列,所以 j 的值是 20。
  4. z = i + j

    • z 的值是 i 和 j 的和。

將上面的數值代入公式:

ㅤㅤ
z = i + j; z = 12 + 20; z = 32;

結論

執行完程式片段後,z 的值為 32

0
0
#5989582

z 的值是 32,這可能是由於在計算過程中加上了字符串的終止符 '\0'。在實際的C/C++環境中,sizeof(s) 將僅僅返回數組的大小(20),而 strlen(s) 將返回字符串的長度(不包括終止符)。因此,如果這段代碼是在標準C/C++環境中運行,z 的值應該是 31。這裡的不一致可能是因為在Python模擬中沒有考慮到C/C++中的終止符。

0
0

私人筆記 (共 3 筆)

私人筆記#4488528
未解鎖
C庫函數 size_t strlen(c...
(共 178 字,隱藏中)
前往觀看
1
0
私人筆記#4501881
未解鎖
Strlen[s ] = 20 (宣告為...
(共 46 字,隱藏中)
前往觀看
1
0
私人筆記#4724416
未解鎖
i=strlen(s)=12字串長度 用...
(共 73 字,隱藏中)
前往觀看
0
0