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
我有一个名为 "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