好的,这是一个C编程的家庭作业问题。但我真的被卡住了。
我要求用户输入单词,然后将输入插入数组,但我无法控制用户输入的单词数。
我想我要问的是如何在C中声明一个数组而不声明其长度而不询问用户应该是多长。
我知道这与malloc有关,但如果你能给我一些如何做的例子,我真的很感激。
答案 0 :(得分:3)
你可以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;
}
答案 1 :(得分:2)
您可以每次重新分配:
int size = 0;
char **array = malloc(0);
while(/* something */)
{
char *string = // get input
size++;
array = realloc(array, size * sizeof(char*));
array[size - 1] = string;
}
如果你关心速度的话,还是大块的。
答案 2 :(得分:0)
是的,你想要malloc。看看这个啧啧。
http://www.cprogramming.com/tutorial/dynamic_memory_allocation.html
这个网站一般都适合学习。
以下是使用realloc的示例,它基本上就是您要求做的事情。
http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/
答案 3 :(得分:-1)
0)显然你需要多个缓冲区,所以你需要一个像结构这样的列表:也许是一个带有char数组100个字符的记录和一个指向下一个结构的指针 1)您需要通过char捕获单词char并将它们存储在缓冲区中 2)一旦缓冲区已满,你就会分配另一条记录,将它与上一条记录链接起来并继续运行,直到你没有记忆或流程结束。
这应该是比realloc功能更好的性能。我相信malloc正试图给出连续的内存块。因此,类似结构的列表会更快,效果更好。