2014-10-16 119 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