簡體   English   中英

如何聲明具有任意大小的數組

[英]How to declare an array with an arbitrary size

好的,這是一個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)顯然你需要多個緩沖區,所以你需要一個像結構一樣的列表:也許是一個帶有char數組100個字符的記錄和一個指向下一個結構的指針1)你需要通過char捕獲單詞char並將它們存儲在緩沖區2中)一旦緩沖區已滿,您就會分配另一條記錄,將其與前一條記錄鏈接起來並繼續運行,直到您沒有記憶或流程結束。

這應該是比realloc功能更好的性能。 我相信malloc正試圖給出連續的內存塊。 因此,類似結構的列表將更快並且更好地工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM