gpt4 book ai didi

c++ - 了解 C++ 中的 C 字符串和字符串文字

转载 作者:太空狗 更新时间:2023-10-29 20:06:32 24 4
gpt4 key购买 nike

我有几个关于字符串文字和 C 字符串的问题想问。

所以如果我有这样的东西:

char cstr[] = "c-string";

据我所知,字符串文字是在内存中创建的,带有一个终止空字节,例如从地址 0xA0 开始到 0xA9 结束,然后从那里返回地址和/或转换为类型 char [ ] which然后指向地址。

然后执行此操作是合法的:

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 *?如果我在这里有错误的想法或完全不正确,请随时纠正我。

最佳答案

您缺少的一点是编译器的一点魔力,其中:

char cstr[] = "c-string"; 

实际执行是这样的:

char *cstr = alloca(strlen("c-string")+1);
memcpy(cstr,"c-string",strlen("c-string")+1);

你看不到那一点,但它或多或少是代码编译后的结果。

关于c++ - 了解 C++ 中的 C 字符串和字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7670059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com