0

我需要存储大量字符串供我的程序使用。我无法静态分配内存 - 但我不确定如何设计动态分配的代码,以便我可以将它作为数组访问,因为每个块的大小不同。

我应该如何进行?

4

5 回答 5

2

什么是未知的,字符串的数量,字符串的大小,或两者兼而有之?

您可以动态分配一个 char * 数组,以根据需要保存每个字符串char **strings = (char**) malloc(NUM_OF_STRINGS * (sizeof(char*)));调用realloc()以分配更多字符串。对于您添加到字符串数组的每个字符串,也使用 malloc 动态分配strings[index] = (char*) malloc(SIZE_OF_STRING);您需要跟踪您分配的这些字符串的数量并相应地调整strings数组的大小。每个字符串都需要通过遍历字符串数组来释放:

for(unsigned int i = 0; i < stringCount; ++i)
{
    free(strings[i]);
}
于 2013-09-24T20:12:34.213 回答
1

创建一个数组char *。这些将一开始就未初始化。当您需要使用一个时,用于malloc()分配适当大小的缓冲区(请记住为空字符留出空间),或者如果您已经有一个要从中复制的字符串,请strdup()用于分配内存并从中复制有必要的。

于 2013-09-24T20:09:21.210 回答
0

您可以通过 strdup() 分配动态内存中的每个字符串,然后使用指针 ti 这个字符串。在使用字符串后不要忘记 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);
于 2013-09-24T20:06:15.123 回答
0

您是否正在寻找这样的东西:-

const char *a[20];
a[0] = "abc";
a[1] = "xyz";
.
.
.
.
a[19] = "try";
于 2013-09-24T20:08:28.160 回答
0

您可以在程序的开头分配一个小数组,然后使用realloc扩展它。

于 2013-09-24T20:08:37.733 回答