如何声明一个任意大小的数组



好了,这是一个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正试图提供有条件的内存块。因此,列表结构将更快,更好地工作。

相关内容

  • 没有找到相关文章

最新更新