#include<iostream>
using namespace std;
int main()
{
char a[2][2] = {"A","B"};
cout << a << endl;
}
因为 a[]
存储了它必须打印 A 和 B 的第一个索引的地址。但是它正在打印
一些地址。打印 A 和 B 的程序有什么问题?
最佳答案
问题出在operator<<
的过载对于 std::ostream
.打印 ascii 字符的特化使用 const char *
,并且您正在尝试打印 char[][]
, 它将衰减为将作为“通用指针”打印的类型(准确地说是 void const *
)- char(*)[2]
,或“指向 char
的双元素数组的指针(感谢 @Wintermute)。
std::array<std::string, 2> a { "A", "B" };
可能是这里最惯用的解决方案。
如果不想修改内容,std::array<const char*, 2>
也会做得很好; const char*
是字符串文字的类型。如果以这种方式存储它们,实际上是将地址存储到编译器在构建二进制文件时放置它们的位置。您无法修改此内存,这就是您必须使用 const
的原因. string
当遇到该代码位置时,变体会将数据复制到您具有写访问权限的内存部分。
当然,当你选择了合适的方式,实际的打印也需要改变!
for (auto const& str : a) {
cout << str << endl;
}
关于c++ - 如何在数组中存储多个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27924328/