如何在数组中存储多个字符串?

时间:2015-01-13 14:24:48

标签: c++ arrays string

#include<iostream>
using namespace std;

int main()
{
    char a[2][2] = {"A","B"};
    cout << a << endl;
}

由于a[]存储了第一个索引的地址,因此必须打印A和B.但是它正在打印 一些地址。打印A和B的程序有什么问题?

2 个答案:

答案 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

哦,还有,you probably don't want to use using namespace std;

答案 1 :(得分:2)

在C ++中,只需帮自己一个忙,并使用一些方便的容器类,例如std::vectorstd::string std::vector<std::string>的正确组合。

std::vector<std::string> a{"A", "B"};

比类似raw-C的解决方案更简单,并且(更容易扩展,例如,如果你想动态地向向量添加更多的字符串)。