我试图理解为什么我的字符串的声明方法确实存在并且不允许我修改它们,让我解释一下。
如果我声明一个像这样的字符串数组: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 :(得分:0)
声明类似
的字符串时char* str = "hello";
您正在创建一个名为string literal
的东西,它在C中无法修改。
但如果您创建类似这样的
,情况并非如此char str[] = { 'h', 'e', 'l', 'l', 'o'};
您可以修改此字符数组