使用C中固定的行数创建二维数组

时间:2012-03-11 22:21:44

标签: c arrays pointers

我想创建一个尺寸为“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”或其他东西。

2 个答案:

答案 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终止符。