2014-10-16 127 views
0

我想了解爲什麼我的字符串的聲明方法確實並且不允許我修改它們,請讓我進行更多解釋。如果我聲明一個字符串數組,如下所示:char * Strs [] = {「Str1」,「Str2」,「Str3」}; 我可以讀取字符串並使用printf等將它們打印到屏幕上。但是我不能修改它們,例如:Strs [0] [0] ='A'對字符串沒有任何幫助打印它(我將粘貼我的測試代碼在下面...)修改字符串數組

但是,如果我聲明數組:char strs [3] [5] = {「Str1」,「Str2」,「Str3」}; 我可以使用數組方法讀取和修改字符串。

爲什麼我的修改方法在第一種情況下不起作用?

int main(int argc, char **argv) 
{ 
    /* Doesn't work 
    char *Strs[] = {"Str1", "Str2", "Str3"}; 

    printf("Premod: %s\n", Strs[0]); 
    Strs[0][0] = 'A'; 

    printf("Postmod: %s\n", Strs[0]); 
    */ 
    //Works 
    char Strs[3][5] = {"Str1", "Str2", "Str3"}; 

    printf("Premod: %s\n", Strs[0]); 
    Strs[0][0] = 'A'; 

    printf("Postmod: %s\n", Strs[0]); 

    return 0; 
} 
+0

'字符*可疑交易報告[]'是一個指針,以你給的字符串常量數組它(這個afaik是隻讀的)。 'char strs [3] [5]'是一個2D數組,初始化爲你給它的字符串。 – 2014-10-16 18:43:15

回答

0

當你聲明類似

char* str = "hello"; 

您正在創建一種叫做​​,這在C不能被修改的字符串。

但是,如果你創建這樣的

char str[] = { 'h', 'e', 'l', 'l', 'o'}; 

您可以修改此字符數組那不是的情況下

+0

感謝您的回覆@haris!字符串文字是否被認爲是常量,這就是爲什麼我無法修改它? – Pyrohaz 2014-10-16 18:49:24

+0

@Pyrohaz:不允許修改字符串文字,因爲文字被放置在只讀存儲器中。 – Haris 2014-10-16 18:52:12