我想创建一个尺寸为“string [5] [*]”的二维字符串数组,但是遇到了一些麻烦。我想做这样的事情:
...
for(i = 0;i < 5;i++){
char* word = ...;
if(strcmp(word,...)){
string[i][j] = (char *) malloc(/*size of word*/);
string[i][j] = word;
j++;
}
}
“string”变量在第i个方向上的长度应为5,并且应该允许在第j个方向上增长所需的数量。
我尝试过:
char* string[5];
但这似乎不起作用。请注意上面的for循环已经简化,部分可能看起来不合逻辑。
编辑: 我正在尝试将字符串列表分为5类。因此,n维数组在某种意义上应该包含5个包含未指定数量的字符串(不是字符串)的数组。我假设这是一个三维字符数组,但很难想到如何编写它。我希望每个字符串[i] [j]术语都包含一个char数组。所以string [0] [0]可能等于“cat”或其他东西。
答案 0 :(得分:2)
试试这个。
char **string;
string = (char **)(malloc(sizeof(char *) * 5));
//malloc the string[i] whenever you need to at what ever size is necessary.
同样在您的代码顶部,问题是每个string[i][j]
都是char
,并且您不能使用malloc作为非指针。每个string[i]
都是char *
,你必须使用malloc。
答案 1 :(得分:1)
这一行
string[i][j] = ...
会双倍取消引用char**
,这意味着您要为char
分配内容。如果某事碰巧是一个指针,那么编译器将不允许它。
相反,我认为你想要:
string[i] = (char*) malloc(...);
然后您的2D数组定义仍然保持原样:
char* string[5];
您可能已经知道这一点,但为了以防万一,我会添加一些其他说明。通常无法使用=
分配C字符串。相反,你需要:
strcpy(string[i], word);
其次,malloc()
不应该是strlen(word)
,而是:
strlen(word) + 1
额外字节用于nul终止符。