【发布时间】:2020-02-14 23:57:55
【问题描述】:
我有一个叫做“array”的短字符数组。我正在尝试为其重新分配更多空间,然后在末尾添加更多字符。出于某种原因,当我打印数组时,这些额外的字符不会显示出来,尽管当我单独索引它们时它们会显示出来。
#include <stdio.h>
#include <stdlib.h>
int main(){
char *array = malloc(2);
array[0] = 'b';
array[1] = '\0';
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] = '\0';
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?
【问题讨论】:
-
OT:关于
char *array = malloc(2);始终检查(!=NULL)返回值以确保操作成功。如果不成功,则调用perror( "malloc failed" );向stderr输出您的错误消息“malloc failed”以及系统认为错误发生的文本原因。这是不可恢复的,所以下一条语句应该是:exit( EXIT_FAILURE ); -
OT:关于:
array = realloc(array, (16));以及我对malloc()的评论有考虑:realloc()的功能可能会失败。当它失败时,一个 NULL 指针值将覆盖array()中的原始指针,结果是不可恢复的内存泄漏。建议:char temp = realloc(array, (16)); if( ! temp ) { // handle error and exit } array = temp;
标签: c arrays pointers malloc realloc