【问题标题】:Dynamic Allocation Two dimensional array of fixed-length strings动态分配 固定长度字符串的二维数组
【发布时间】:2013-03-21 07:52:12
【问题描述】:

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

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
}   

所以,我不知道这是否正确。

我很乐意提供一些帮助和提示..

编辑:

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

我需要做以下事情:

【问题讨论】:

  • 虽然这属于 codereview,但如果您的意图是 [MAX_WORD_LEN+1] 大小的字符缓冲区的网格,它看起来是正确的。您可能需要检查 malloc 返回值等。我不得不问,最终目标是否是输入的单词的 2D 布局,以每行单词的动态列表形式排列?
  • 您的变量名称导致所有这些混乱恕我直言。考虑一下:typedef char** matrix,然后像这样声明您的二维数组:matrix wordList 并继续。
  • 这是一个大学课程的练习,我这样做是为了为明年的学习做准备。目标是接收不确定数量的行,其中包含来自用户的不确定数量的单词,每行以索引 0/1 开头,然后我根据索引和其他一些列表对字符串(单词)进行一些操作,然后我把这些文字行放在二维数组中,因为我必须将操作后的行打印到所有这些行中。我说清楚了吗?
  • @EL11 我有点想通了。如果是这种情况,这完全取决于您想要获得的效率,但是您的整体声明对于网格的预期任务看起来是正确的。我建议您查看realloc() 的文档,但最终您需要在此处跟踪的信息比您目前拥有的更多。例如每行中的单词数,逐行计算。在编写代码之前,先在 paper 上画一会儿。相信我,这会有所帮助。

标签: c arrays string pointers malloc


【解决方案1】:

不赘述,最简单的方法是使用矩阵作为 Linked-Lists 的 Linked-List ..

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    相关资源
    最近更新 更多