【发布时间】:2018-10-03 17:42:50
【问题描述】:
我正在尝试将可变长度 c 字符串的二维数组存储到一个结构中,以便我可以通过网络套接字传输和重建它。
计划是在数据包的标题中设置行和列,帮助我阅读后面的可变尺寸镜头和 arr。我相信我一定是在语法上写错了指针,或者在将它们设置到结构中时需要使用某种辅助指针。
struct STORAGE {
int rows; // hdr
int cols; // hdr
int** lens;
const char*** arr;
}
// code
int rows = 11;
int cols = 2;
int lens[rows][cols];
const char* arr[rows][cols];
// ... fill with strings ...
// ... along with lens ...
STORAGE store;
store.rows = rows;
store.cols = cols;
store.lens = lens;
store.arr = arr;
编译这段代码时出现这些错误:
错误:从
int到int**的无效转换[-fpermissive]错误:无法在赋值中将
const char* [11][2]转换为 `const char***'
我主要来自 Java 背景,但我确实了解指针的工作原理等。对于具有我背景的人(主要编写 java/c++ 和较少的 c)来说,这个语法只是有点偏题。有什么建议吗?
注意:我不使用更复杂的类型(如字符串、映射、向量等)的原因是我需要通过网络传输结构(即,如果堆的大小可变,则指向堆的指针将不起作用)。除非有人能提供更好的解决方案,否则它必须是低级数组。
【问题讨论】:
-
***警报!警报!哔哔哔。警报! -
说真的,你为什么不改用regular standard c++ containers?
-
是否有充分的理由使用 c 样式的数组?
-
不要成为three star programmer。说真的,只需使用
std::vector<std::vector<std::string>>而不是那种指针对指针的怪物。