gpt4 book ai didi

C++ 初始化 char[] 和 char 后,char 显示在 char[]

转载 作者:行者123 更新时间:2023-11-30 01:33:06 28 4
gpt4 key购买 nike

最近在学习Cpp,今天在学习使用Clion做测试的时候,发生了奇怪的事情。

这是我的代码


int main() {
char c = 'b';
char carr[1]{'a'};
char *p1 =&(carr[0]);
char *p2 =&c;
return 0;
}

编译器:

4.2.1 兼容苹果 LLVM 11.0.0 (clang-1100.0.33.8)

数据库:

lldb

这里是内存的详细信息: enter image description here

请帮我找出原因!

最佳答案

这是字符串的 lldb 数据格式化程序有点太急切了。

在调试器中查看 char 数组的人通常不希望将 char[N] 打印为 N 个字符的数组,他们希望将其视为字符串。所以 lldb 为 char[*] 提供了一个“数据格式化程序”,将其呈现为 C 字符串。格式化程序确实应该在数组的长度处手动终止该字符串。您可以通过执行以下操作查看(过于简单的)数据格式化程序:

(lldb) type summary info carr
summary applied to (char [1]) carr is: `${var%s}` (hide value) (skip pointers)

它只是说从数组的开头开始并将内存打印为 C 字符串。

您可以在打印变量时使用 --raw 选项关闭 char 类型的数据格式化程序来查看真实数组:

(lldb) v --raw carr
(char [1]) carr = {
[0] = 'a'
}

关于C++ 初始化 char[] 和 char 后,char 显示在 char[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59127188/

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