gpt4 book ai didi

c++ - C 风格字符串差异 : C/C++

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

C 样式字符串之间有什么区别

char str[10]="Hello";

char str[]="Hello";

char* str= "Hello";

1) 我相信 char str[10]="Hello"是自动变量并存储在堆栈中。正确吗?即分配10 bytes在堆栈上。

2) 是否char str[]="Hello";也存储在堆栈中?即分配6 bytes - including null character在堆栈上。

3) 是否char* str= "Hello";将指针 str 存储在堆栈和对象 "Hello" 上存储在堆上?即分配6 bytes - including null character在堆上。

4) 所有字符串 (in question 1,2 and 3)是 null 终止的。对/错?

5)是否是C or C++每当我们创建像 "Hello" 这样的字符串时,它总是以空终止。假设在 C++我们声明string str = "Hello"; ,是否也为 null 终止?

编辑

考虑在 main() 中声明的所有内容。

@负分和关闭请求。我问这个问题是关于它们存储在堆还是堆栈的位置?还有空终止。

最佳答案

“考虑在 main() 中声明的所有内容。”

然后

1)是的。

2)是的。

3) 是,也不是(在常见实现中它既不存储在堆栈中,也不存储在堆中)。 “即分配 6 个字节”——您似乎忘记了指针所需的内存。另外,评论和另一个答案中有一个错误的说法,即 char* str= "Hello"; 是错误的,但实际上它是合法的 C,而且目前是合法的 C++ ...参见What is the type of string literals in C and C++?

4) 正确,但如果将 10 更改为 5,则结果为 false - 也就是说,给定 char str[5]="Hello";, str不是以 NUL 结尾。

5) False 和 no(尽管实现可能会在字符串后面存储一个 NUL —— C++11 需要它 —— 但这不是字符串的一部分)。

<小时/>

“我问这个问题是关于它们存储在堆还是堆栈的位置?”

人们从哪里知道这些是唯一的内存类型?局部变量存储在堆栈上,通过 malloc 分配的内存或(非放置)new 从堆中分配。程序代码、文件范围变量和文字不属于这些类别。

关于c++ - C 风格字符串差异 : C/C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16621245/

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