在C中創建常量字符串的好方法是什麼?通過對其索引位置之一進行字符分配不能突變的字符串。並且在初始化後的後續執行中不能被另一個字符串替換的字符串。在C中使用char *和char []表示常量字符數組的差別
我在以下代碼中嘗試了char *和char []。我嘗試了使用和不使用「const」關鍵字。結果是非常奇怪的。
以下是我的代碼:
#include <stdio.h>
main() {
char a []= "abc" "def";
char* b = "abcdef";
const char c [] = "abcdef";
const char* d = "abcdef";
a[1] = 'y';
b[1] = 'y';
c[1] = 'y';
d[1] = 'y';
printf("%s %s %s %s \n", a, b, c, d);
a = "overwrited";
b = "overwrited";
c = "overwrited";
d = "overwrited";
printf("%s %s %s %s \n", a, b, c, d);
}
結果是 在第一個printf,所有的a,b,C,d可以被突變;但c和d會顯示警告「只讀位置的分配」。 在第二個printf中,a和c都返回錯誤。但是b和d被另一個字符串順利地替換並且變得「過時」。
我對這個結果非常困惑,好像「const」關鍵字對字符串賦值沒有影響;但它對索引字符變異有影響。 char []和char *也顯示不同的行爲。有人能向我解釋這個背後的機制嗎?
@GregHewgill:我建議你再看一遍,這個問題不是那個問題的重複。 – caf
[char * str'和'char str []'之間的區別以及兩者如何在內存中存儲?](http://stackoverflow.com/questions/15177420/what-does-sizeofarr-return/15177499#15177499) –
@GrijeshChauhan你的鏈接已經啓發了我的差異btw char *和char []。我在我的問題中添加了一些更多的代碼,以便使它涵蓋更多「常量」概念。 – Erencie