char words[wordCount][MAX_WORD_LENGTH];
我知道我需要使用 malloc 才能拥有用户定义的数组长度,但是我将如何使用二维数组来做到这一点?
char words[MAX_WORD_LENGTH];
words = (words *) malloc (wordCount)
这样的东西会起作用吗?刚开始使用c,所以我还是习惯了。
char words[wordCount][MAX_WORD_LENGTH];
我知道我需要使用 malloc 才能拥有用户定义的数组长度,但是我将如何使用二维数组来做到这一点?
char words[MAX_WORD_LENGTH];
words = (words *) malloc (wordCount)
这样的东西会起作用吗?刚开始使用c,所以我还是习惯了。
此链接可能会有所帮助
指针可以很容易地用于使用 malloc 在 C 中创建二维数组。这个想法是首先创建一个一维指针数组,然后为每个数组条目创建另一个一维数组。
另一个答案存在于堆栈溢出中,它自 malloc() 用于 2D 数组(使用指针到指针)
你必须先这样做:
char *words = calloc(wordCount * MAX_WORD_LENGTH, sizeof(char));
和访问words[i][j] as words[i*MAX_WORD_LENGTH + j]
如果您想为单词数组中的每个单词指针设置用户定义的大小:
char * words[wordCount];
for (i =0; i< wordCount; i++)
words[i] = malloc(sizeof(char)*User_defined_Size);
如果您想使用两个下标索引数组words[i][j]
,那么您需要进行两次分配(好吧,如果您对指针的处理非常有信心,您可以将其分配一次,但如果您是问这个问题)。
您需要为指针分配足够的空间,并为数据分配足够的空间:
char **words = malloc(wordCount * sizeof(*words));
char *data = malloc(wordCount * MAX_WORD_LENGTH);
if (words == 0 || data == 0)
{
free(data);
free(words);
...report error?...
}
for (int i = 0; i < wordCount; i++)
words[i] = data + (i * MAX_WORD_LENGTH);
...now you can use words[i][j] to access the jth character of the ith word...
char **words = NULL;
words = (char **)malloc(sizeof(char*) * user_defined_size_A);
for(i = 0; i < user_defined_size_A; i++) {
words[i] = (char*) malloc(sizeof(char) * user_defined_size_B);
}
你可以试试这个...