C 語言入門

【C 語言入門】191.可修改內容的多個字串

我們在上一篇文章有說到,使用二維陣列存的話,我們可以把每個字元都修改;而用指標陣列存的話,可以直接對整個字串修改。 同時呢,他們也有各自的缺點,使用二維陣列直接存字元的話,我們直接改字串會比較麻煩;而用指標陣列存字串的話,我們又沒有辦法改每個字元。 於是我們的程式可以這樣寫。 儲存的東西不一樣,就影響了它們可以修改的東西不一樣。 如果我們讓 strB 字串的每個位置都去存 strA 裡面每個字串的開頭的位址的話,這樣就可以同時獲得二維陣列和指標陣列的好處。 我們可以直接修改每個字元,也可以直接修改整個字串。 strB[2] 其實就是 strA[2] ,而 strB[2][0] 也就是 ‘y’。 這樣我們就可以輕易改到字元了。 那如果我們要對字串進行更改呢? What 本身是字串的字面常數,如果要直接轉成指標的話,這些內容是不能改的,是 const。 我們希望 strB 指向的字串像 strA 裡面這些字元一樣,是可以修改的。 因此 strB[0] = “What”; 這樣的轉型是有問題的。 我們必須想辦法讓我們產生的這些格子不是 const,可以更改。 我們都知道,雙引號是不能直接改成指標的。 但是如果我們先把它存在字元陣列,這樣是 strC。 然後再把字元陣列的位址,存在 strB 指標的話,這樣就可以成功更改了。 我們可以把 strC 的開頭位址存在 strB[0],這樣 strB[0] 就從原本指向 “How” 這個字串改成指向 “What” 這個字串。 因此當我們去存取 strB[0][0] 的時候,我們也可以修改字元。 但是這個方法會讓你原本的字串沒辦法使用,而且會一直佔據記憶體的空間。