C - 如何在 realloc() 之后添加到 char 数组的末尾

C - how to add to the end of a char array after realloc()

我有一个名为 "array" 的短字符数组。我正在尝试为其重新分配更多 space,然后在末尾添加更多字符。出于某种原因,当我打印数组时,这些额外的字符没有显示,尽管当我单独索引它们时它们确实显示了。

#include <stdio.h>
#include <stdlib.h>
int main(){
    char *array = malloc(2);
    array[0] = 'b';
    array[1] = '[=10=]';
    char stringToAdd[] = "honey";
    array = realloc(array, (16));
    int pos;
//add stringToAdd into array one char at a time
    for (pos = 0; pos < 5; pos++){
        array[2+pos] = stringToAdd[pos];
        printf("%d ", 2+pos);
        printf("%c ", array[2+pos]);
        printf("%s\n", array);
    }
    array[pos] = '[=10=]';
    int k = sizeof(array);
//should print out the string "bhoney" and its length
    printf("%s, length = %d\n", array,k);
    free(array);
    return 0;
}

输出为:

2 h b
3 o b
4 n b
5 e b
6 y b
b, length = 8

而且数组的长度似乎是 8,无论多少space我尝试重新分配给它?

应该是:

for (pos = 0; pos < 5; pos++){
    array[1+pos] = stringToAdd[pos];
    printf("%d ", 1+pos);
    printf("%c ", array[1+pos]);
    printf("%s\n", array);
}
array[1+pos] = '[=10=]';

您在空终止符之后添加了字符。打印字符串在 null 处停止。

将新字符分配给 array[1+pos] 而不是 array[2+pos]。这也适用于在循环后添加新的空终止符,它应该是

array[1+pos] = '[=10=]';

您也可以使用 strcat() 而不是循环:

strcat(array, stringToAdd);

它将自动找到空终止符,因此您不必知道偏移量,并正确添加新的空终止符。

sizeof(array)是指针的大小(8字节),不是字符串的长度。如果你想要字符串长度,你应该使用 strlen(array)。参见 difference between sizeof and strlen in c