gpt4 book ai didi

c - C 中不同类型的字符串声明

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

从程序地址空间的角度来看,字符串定义中的以下符号有什么区别?

char str[20] = "Just to Ask";

char *str = "Just to Ask";

最佳答案

char str[20] = "Just to Ask";

上述语句定义了一个包含 20 个字符的数组 str,并使用字符串文字 “Just to Ask” 初始化该数组。上面的语句相当于

char str[20] = {'J', 'u', 's', 't', ' ', 't', 'o', ' ', 'A', 's', 'k', '\0'};

数组初始值设定项列表只有 12 元素。数组 str 的其余 8 元素被初始化为 0。如果数组具有自动存储分配,则它在堆栈上分配。如果有静态存储分配,则分配在程序内存空间的数据段。

以下声明

char *str = "Just to Ask";

定义的str不是一个数组,而是一个指向字符串文字“Just to Ask”的指针。字符串文字是只读的,尝试修改它是未定义的行为。因此,您的问题中陈述的两个陈述完全不同,第二个陈述最好写为

const char *str = "Just to Ask";  // string literal is read-only

关于c - C 中不同类型的字符串声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23167675/

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