声明并分配给二维字符指针

Declaring and allocating to a 2D char pointer

如何在事先不知道每个字符串(字符数组)将包含多少个字符的情况下声明和分配二维数组? 例如,这个-

char** input = new char*(m*sizeof(char*)) //where m is input from terminal

给出错误-

error: invalid conversion from ‘long unsigned int’ to ‘char*’ [-fpermissive]

在此基础上,我有一个以 char** 作为参数的函数。我想知道通过这个指针存储了多少个char数组。

int read2DArray(char* arr[]){
int l=0;
while(arr[l][0]!='[=12=]') l++;
return l;
}

这是正确的吗?

只有当创建二维数组的人足够周到以包含单个字符“\0”的长度为 1 的一维数组终止它时,这才是正确的。

如果您愿意,可以使用该约定。另一种方法是将数组的维度作为附加参数传递。

至于声明数组,请使用方括号而不是圆括号,并且不要提及 sizeof(anything)-- 编译器会处理大小。

char** input = new char*[m];

您收到错误消息是因为您告诉编译器使用 value m*sizeof(char *).[=12= 创建一个新的 char* ]