好了,这是一个C编程的家庭作业问题。但我真的卡住了。
我要求用户输入单词,然后将输入的单词插入到数组中,但我无法控制用户键入的单词数量。
我想我要问的是你如何在C语言中声明一个数组而不声明它的长度,也不问用户长度应该是多少
我知道这和malloc有关,但如果你能给我一些例子,我将非常感激。
您可以malloc
一个足够大的内存块来容纳一定数量的数组项。
然后,在您超过这个数字之前,您可以使用realloc
使内存块更大。
下面是一段C代码,当整数数组太小而不能容纳下一个整数时,重新分配整数数组。
#include <stdio.h>
#include <stdlib.h>
int main (void) {
int *xyzzy = NULL; // Initially NULL so first realloc is a malloc.
int currsz = 0; // Current capacity.
int i;
// Add ten integers.
for (i = 0; i < 10; i++) {
// If this one will exceed capacity.
if (i >= currsz) {
// Increase capacity by four and re-allocate.
currsz += 4;
xyzzy = realloc (xyzzy, sizeof(int) * currsz);
// Should really check for failure here.
}
// Store number.
xyzzy[i] = 100 + i;
}
// Output capacity and values.
printf ("CurrSz = %d, values =", currsz);
for (i = 0; i < 10; i++) {
printf (" %d", xyzzy[i]);
}
printf ("n");
return 0;
}
你可以像这样每次重新分配它:
int size = 0;
char **array = malloc(0);
while(/* something */)
{
char *string = // get input
size++;
array = realloc(array, size * sizeof(char*));
array[size - 1] = string;
}
是的,您需要malloc。结帐
http://www.cprogramming.com/tutorial/dynamic_memory_allocation.html这个网站总的来说很适合学习。
下面是一个使用realloc的例子,它基本上就是你要做的。
http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/0)显然,您将需要多个缓冲区,所以您将需要一个类似列表的结构:也许是一个记录与字符数组100字符和指针指向下一个结构1)你需要一个字符一个字符地捕获单词,并将它们存储在你的缓冲区中2)一旦缓冲区满了,你分配另一个记录,将它与前一个记录链在一起,直到内存耗尽或进程结束。
这应该比realloc函数的性能更好。我相信malloc正试图提供有条件的内存块。因此,列表结构将更快,更好地工作。