[英]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.