#include<iostream>
using namespace std;
int main()
{
char a[2][2] = {"A","B"};
cout << a << endl;
}
由于a[]
存储了第一个索引的地址,因此必须打印A和B.但是它正在打印
一些地址。打印A和B的程序有什么问题?
答案 0 :(得分:5)
问题在于operator<<
的{{1}}超载。打印ascii字符的专门化使用std::ostream
,并且您正在尝试打印const char *
,它将衰减为将作为“通用指针”打印的类型(char[][]
为精确) - void const *
,或“指向char(*)[2]
的双元素数组的指针(感谢 @Wintermute )。
char
可能是这里最惯用的解决方案。
如果您不想修改内容,std::array<std::string, 2> a { "A", "B" };
也会很好; std::array<const char*, 2>
是字符串文字的类型。如果以这种方式存储它们,实际上是在构建二进制文件时将地址存储到编译器放置的位置。您无法修改此内存,这就是您必须使用const char*
的原因。当遇到代码位时,const
变体将数据复制到您具有写访问权限的内存部分。
当然,当你选择正确的方式时,实际的印刷也需要改变!
string
答案 1 :(得分:2)
在C ++中,只需帮自己一个忙,并使用一些方便的容器类,例如std::vector
和std::string
std::vector<std::string>
的正确组合。
std::vector<std::string> a{"A", "B"};
比类似raw-C的解决方案更简单,并且(更容易扩展,例如,如果你想动态地向向量添加更多的字符串)。