用C不断调整数组的大小

时间:2013-12-01 16:15:26

标签: c arrays string char

在我的应用程序中,我们一次接受一个char值,我们需要能够将它们变成一个字符串。我们通过将char值放入char数组然后清除数组来逐个组装这些字符串。但是字符串的长度各不相同,我们无法确定字符串的大小。我们如何根据需要更改数组的大小以增加空间?

另外,我们如何打印出阵列?

2 个答案:

答案 0 :(得分:4)

如果数组是使用malloc动态分配的,您可以使用realloc调整其大小:

int array_size = 1024;
char *array = (char *) malloc(array_size);

int n = 0;
char c;
while ((c = getchar()) != EOF) {
    array[n++] = c;
    if (n >= array_size) {
        array_size += 1024;
        array = (char *) realloc(array_size);
    }
}
array[n] = '\0';

要打印出数组的内容,您只需将其传递给printfputs

printf("%s\n", array);
puts(array);

答案 1 :(得分:0)

如果您不知道自己需要的尺寸,并且一次添加一个字符,则可以考虑使用linked list。它可以根据您的需要增长。 disadvntages将是查找有点慢,如果你需要释放内存,或清除它,你将不得不为每个元素,一次一个。

您还可以采用dynamic array方法:分配您认为足够大的特定大小,当它满80%时,分配一个新缓冲区,两倍大,并复制旧缓冲区的内容。新的,更大的。