我需要存储大量字符串供我的程序使用。我无法静态分配内存 - 但我不确定如何设计动态分配的代码,以便我可以将它作为数组访问,因为每个块的大小不同。
我应该如何进行?
什么是未知的,字符串的数量,字符串的大小,或两者兼而有之?
您可以动态分配一个 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]);
}
创建一个数组char *
。这些将一开始就未初始化。当您需要使用一个时,用于malloc()
分配适当大小的缓冲区(请记住为空字符留出空间),或者如果您已经有一个要从中复制的字符串,请strdup()
用于分配内存并从中复制有必要的。
您可以通过 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);
您是否正在寻找这样的东西:-
const char *a[20];
a[0] = "abc";
a[1] = "xyz";
.
.
.
.
a[19] = "try";
您可以在程序的开头分配一个小数组,然后使用realloc扩展它。