[英]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.