【发布时间】:2017-05-31 00:24:13
【问题描述】:
我正在根除 std::string 以支持 C 字符串,我是新手。如何获得以下编译? g++ 抱怨:cannot convert char(*)[16] to char**
#include <iostream>
void print(char** s, int n)
{
for (int i = 0; i < n; ++i)
{
std::cout << s[i] << '\n';
}
}
int main()
{
constexpr int n = 3;
char s[n][16]{ "Hello", "Bye", "Sky"};
print(s, n);
}
【问题讨论】:
-
“我正在根除 std::string 以支持 C 字符串” 但为什么
-
我希望您有充分的理由删除 std 字符串以支持 char 数组。会大大增加出错的可能性。
-
char s[n][16]{ "Hello", "Bye", "Sky"};ojeez. -
到目前为止,我认为大多数编译器都实现了小字符串优化,其中小字符串不是动态分配的。
-
将数组传递给函数,只会将第一级数组衰减为指针,因此数组大小 16 仍然是
s类型的一部分,print采用指向指针的指针.您需要在print的参数类型中包含数组大小才能使其正常工作。请参阅此question(但我相信主体适用于 c++)。
标签: c++ string compiler-errors c-strings