【发布时间】: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