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

标签 c++ arrays string

#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;
}

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

关于c++ - 如何在数组中存储多个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27924328/

相关文章:

c++ - 使用初始化列表中的引用初始化对象成员

c++ - 模板代码的有效性是什么意思?

Java HashMap 内部

java - 为名称数组创建快速排序

php - 将字符串转换为数字并返回字符串?

c - 如何在C中收集字符?

c++ - 使用 Qt WebEngineView 在特定页面打开 PDF

arrays - Powershell foreach(列出引用的数组项命令)

javascript - 无法在javascript中获取字符串长度

c++ - 如何在全局范围内初始化结构/类