我有几个关于字符串文字和 C 字符串的问题。
所以,如果我有这样的事情:
char cstr[] = "c-string";
据我了解,字符串文字是在内存中创建的,带有一个终止空字节,例如从地址 0xA0 开始并在 0xA9 结束,然后从那里返回地址和/或转换为类型 char [ ] 然后指向地址。
然后执行此操作是合法的:
for (int i = 0; i < (sizeof(array)/sizeof(char)); ++i)
cstr[i] = 97+i;
所以从这个意义上说,只要将字符串文字转换为 char [ ] 类型,就可以修改它们吗?
但是对于常规指针,我开始明白,当它们指向内存中的字符串文字时,它们无法修改内容,因为大多数编译器在常量的某个下限地址空间中将分配的内存标记为“只读”。
char * p = "const cstring";
*p = 'A'; // illegal memory write
我想我想了解的是为什么不允许 char * 类型像数组一样指向字符串文字并修改它们的常量?为什么字符串文字不像 char [ ] 那样被转换为 char *?如果我在这里有错误的想法或完全不正确,请随时纠正我。