gpt4 book ai didi

c - 关于将字符串初始化为数组

转载 作者:行者123 更新时间:2023-11-30 15:31:59 24 4
gpt4 key购买 nike

有人告诉我,当像这样初始化字符串时

char str[] = "Hello world!";

编译器会在常量内存中分配一 block 区域(仅供程序读取),然后将字符串复制到驻留在堆栈中的数组中。我的问题是,在修改给定的副本后我可以读取或指向原始字符串吗?如何?如果不是,为什么该字符串首先存在于堆栈之外?

最佳答案

这样做是为了提高空间效率。当你写:

char str[] = "Hello world!";

它的编译效果就像您编写的一样:

static char str_init[] = "Hello world!";
char str[13];
strncpy(str, str_init, 13);

实现此目的的另一种方法可能相当于:

char str[13];
str[0] = 'H';
str[1] = 'e';
...
str[11] = '!';
str[12] = 0;

但是对于长字符串来说,这是非常低效的。它不会为字符串的每个字符使用 1 个字节的静态数据,而是为每个字符使用完整的指令字(可能是 4 个字节,但在某些体系结构上可能更多)。这将使初始化数据的大小不必要地增加四倍。

关于c - 关于将字符串初始化为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24477739/

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