如何声明具有任意大小的数组

好的,这是一个C编程的家庭作业问题。 但我真的被卡住了。

我要求用户输入单词,然后我将输入插入数组,但我无法控制用户键入的单词数。

我想我要问的是如何在C中声明一个数组而不声明其长度并且不询问用户应该是多长。

我知道这与malloc有关,但是如果你能给我一些如何做的例子,我会非常感激。

你可以每次重新分配它:

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一块足够大的内存来容纳一定数量的数组项。

然后,在超过该数字之前,可以使用realloc使内存块更大。

这里有一些C代码显示了这一点,只要它太小而无法容纳下一个整数,就会重新分配一个整数数组。

 #include  #include  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; } 

是的,你想要malloc。 看看这个啧啧。

http://www.cprogramming.com/tutorial/dynamic_memory_allocation.html

这个网站一般都适合学习。

这是一个使用realloc的例子,它基本上就是你要求做的。

http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/

0)显然你需要多个缓冲区,所以你需要一个像结构一样的列表:也许是一个带有char数组100个字符的记录和一个指向下一个结构的指针1)你需要通过char捕获单词char并将它们存储在缓冲区2中)一旦缓冲区已满,您将分配另一条记录,将其与前一条记录链接起来并继续运行,直到您没有记忆或流程结束。

这应该是比reallocfunction更好的性能。 我相信malloc正试图给出连续的内存块。 因此,类似结构的列表将更快,更好地工作。