在C中使用字符串的“数组”

时间:2013-09-24 20:04:08

标签: c

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

我该怎么办?

5 个答案:

答案 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展开它。