程式練習題庫
← 回題目列表
c難度 ●●●

C5 — 字串其實是 char 陣列加一個結尾記號

Python 的 str 是一個物件,它自己知道自己多長,len(s) 隨問隨答。

C 沒有字串型別。所謂的字串就是一串 char,最後放一個值為 0 的字元(寫成 '\0')當作「到這裡結束」的記號。沒有人記錄長度——長度是數出來的

題目

不要用 strlen,自己寫一個 my_strlen 函式,數出字串有幾個字元(不含結尾記號)。

預期輸出:

hello 的長度是 5
空字串的長度是 0

提示

從第 0 個字元開始往後走,一直走到遇見 '\0' 為止,走了幾步就是長度。

判斷條件可以寫成 s[i] != '\0'

會照出 Python 藏了什麼

len(s) 在 Python 是 O(1)——長度早就存好了,直接讀出來。C 的 strlen 是 O(n),每次呼叫都要重新走一遍整個字串。

這解釋了一件事:在 C 裡把 strlen(s) 寫在迴圈的條件裡,會讓每一圈都重數一次,迴圈就從 O(n) 變成 O(n²)。Python 幫你藏起來的那個「長度」欄位,省掉的是這個。

順帶一提,這也是為什麼 C 的字串很容易出安全漏洞:如果那個 '\0' 不見了,程式會一直往後讀,讀進不屬於它的記憶體。

本機編譯

gcc main.c -o main.exe
./main.exe

需要先裝好 C 編譯器。Windows 可以用 MinGW-w64 或 w64devkit,macOS 與 Linux 通常內建或用套件管理器安裝。

C 題不提供線上執行,自己在本機編譯,寫完可以請 AI 看看。

討論區

登入後就能留言和評分。

    還沒有人留言。