动态分配固定长度字符串的二维数组

时间:2013-03-21 07:52:12

标签: c arrays string pointers malloc

在程序中,我必须从输入中扫描

scanf("%s",currWord);

一个未定义数量的单词,它们以非定义的行数出现。

我想将这些单词放在二维字符串数组中。 字符串的长度是固定的[MAX_WORD_LEN+1]

我的想法是:

int row=10 //10 lines for starting
int col=5 //5 words in each line for starting
int i;

typedef char word[MAX_WORD_LEN+1]; //new type of 11char lenght string
word** matrix; //2 dimensional array (pointers) with no memory

matrix = malloc(row*sizeof(word*)); //allocate row number of word* (word pointer) size

for(i=0;i<row;i++)
{
  matrix[i] = malloc(col*sizeof(word)); //allocate col number of words to each row
}   

所以,我不知道这是不对的。

我会很高兴得到一些帮助和提示..

修改

当从输入接收单词时,如果需要,我必须增加内存(每行中的行数和单词数),我该怎么做? (realloc?)

我需要做以下事情:

Image

1 个答案:

答案 0 :(得分:1)

没有详细说明,最简单的方法是使用Matrix作为链接列表的链接列表..

struct matrix_field
{
    char data [11];
    matrix_field * next_field;
};

struct matrix_row
{
    matrix_field * first_field;
    matrix_row * next_row;
};

struct matrix
{
    matrix_node * first_row;
};

您的数据在内存中将如下所示..

[+]
 |
 v
[x]-->[a]-->[b]-->[c]-->
 |
 v
[y]-->[d]-->[e]-->[f]-->
 |
 v
[z]-->[g]-->[h]-->[i]-->
 |
 v

---------------

[+] matrix

[x] .. [z] matrix_row

[a] .. [i] matrix_field