簡體   English   中英

在C中使用字符串的“數組”

[英]Using an “Array” of Strings in C

我需要存儲大量字符串以供程序使用。 我無法靜態分配內存-但是我不確定如何設計動態分配的代碼,以便我可以將其作為數組訪問,因為每個塊的大小都不相同。

我應該如何進行?

什么是未知數,字符串數,字符串大小或兩者兼而有之?

您可以動態分配一個char *數組,以容納每個字符串char **strings = (char**) malloc(NUM_OF_STRINGS * (sizeof(char*))); 根據需要調用realloc()以分配更多字符串。 對於添加到字符串數組中的每個字符串,還使用malloc strings[index] = (char*) malloc(SIZE_OF_STRING);動態分配strings[index] = (char*) malloc(SIZE_OF_STRING); 您需要跟蹤分配的這些字符串的數量,並相應地調整strings數組的大小。 每個字符串都需要通過遍歷字符串數組來釋放:

for(unsigned int i = 0; i < stringCount; ++i)
{
    free(strings[i]);
}

創建一個char *數組。 首先將這些未初始化。 當您需要使用一個時,請使用malloc()分配適當大小的緩沖區(請記住為空字符留出空間),或者如果您已經有要復制的字符串,請使用strdup()進行分配內存並根據需要從中復制。

您可以通過strdup()在動態內存中分配每個字符串,然后使用-將該字符串用作指針。 使用字符串后,不要忘記free(ptr)。

例:

char *strings[10000]; // array for 10, 000 string pointers
int ndx = 0;
char strbuf[1000];

while(fgets(strbuf, sizeof(strbuf), f)
  strins[ndx++] = strdup(strbuf);

您是否正在尋找這樣的東西:

const char *a[20];
a[0] = "abc";
a[1] = "xyz";
.
.
.
.
a[19] = "try";

您可以在程序的開頭分配一個小數組,然后使用realloc對其進行擴展。

暫無
暫無

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

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