声明并分配给二维字符指针
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*
]
如何在事先不知道每个字符串(字符数组)将包含多少个字符的情况下声明和分配二维数组? 例如,这个-
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*
]