標準字串函式庫 — (String Library)
標準 C 語言的字串大都是靜態函數,也就是不會在函數中分配新的記憶體。
K&R 對字串的設計理念
為何 C 語言要設計出像 strcpy(), strcat(), strtok(), strcmp(), strlen() 這樣的字串函式庫,而不直接使用像上述的動態字串函式庫取代就好了呢?關於這個問題,我們必須回到當初 K & R 兩人設計 C 語言的初始環境,才能看出其原因。
K & R 設計 C 語言時,還沒有物件導向的概念,因此不太可能設計出像範例五這樣具有物件導向概念的字串函式庫。當時電腦的記憶體極為有限,而且 K&R 一心只想設計出 UNIX 作業系統,因此才設計出像 strcpy()、strcmp() 這樣的函數,可以同時支援字串陣列與指標。
K & R 所設計的字串函式庫可不是用來支援應用程式的,而是用在設計作業系統上的,特別是在基本文字檔的處理上。當時的環境不像我們現在這麼奢侈,有好幾 GB 的記憶體可以用,幾乎可以將任何文字檔都全部讀到記憶體中再進行處理,而是必須一個字一個字的讀,或者是一行一行的讀,因此這些靜態的字串函式庫就已經相當夠用了。
這些字串函式庫所處理的對象,就是從檔案中讀出來,不超過一行長度的字串,就當時的環境,我們可以假設檔案中任一行的長度不會超過 127 個字元,因此您只要宣告像 char line[128] 這樣的變數,就足以處理任何的文字檔了。
理解了這個背景,相信讀者應該能夠感覺到為何 K&R 沒有發展出動態字串函式庫了吧?
但是在 C 語言漫長的發展過程中,為何動態字串函式庫沒有被納入標準函式庫中,這或許才是真正的問題,也是學習者之所以誤用 C 語言的原因之所在,關於這點,或許牽涉到了太多的歷史,筆者也無從考證起了。
來自 jserv 的建議
code => 沒有「C 語言的字串函式庫」的說法 整體是 C Library: http://www.tutorialspoint.com/cstandardlibrary/string_h.htm
==> “但是在 C 語言漫長的發展過程中,為何動態字串函式庫沒有被納入標準函式庫中,” 這句值得商榷