我需要存储大量字符串以供我的程序使用。我无法静态分配内存 - 但我不确定如何为动态分配设计代码,以便我可以将其作为数组访问,因为每个块的大小不同。
我该怎么办?
答案 0 :(得分:2)
什么是未知的,字符串的数量,字符串的大小,或两者兼而有之?
您可以根据需要动态分配char *数组来保存每个字符串char **strings = (char**) malloc(NUM_OF_STRINGS * (sizeof(char*)));
,以分配更多字符串。对于添加到字符串数组的每个字符串,也可以使用malloc realloc()
动态分配。您需要跟踪分配的这些字符串的数量并相应地调整strings[index] = (char*) malloc(SIZE_OF_STRING);
数组的大小。迭代字符串数组需要释放每个字符串:
strings
答案 1 :(得分:1)
创建一个char *
的数组。这些将是未初始化的。当您需要使用一个时,使用malloc()
分配适当大小的缓冲区(记住为空字符留出空间),或者如果您已经有一个要复制的字符串,请使用{{1根据需要分配内存和副本。
答案 2 :(得分: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);
答案 3 :(得分:0)
你在寻找这样的东西: -
const char *a[20];
a[0] = "abc";
a[1] = "xyz";
.
.
.
.
a[19] = "try";
答案 4 :(得分:0)
您可以在程序开头分配一个小数组,然后使用realloc展开它。