如何声明具有任意大小的数组
好的,这是一个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正试图给出连续的内存块。 因此,类似结构的列表将更快,更好地工作。