Посмотрите, что я нашел с помощью этого простого кода:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *string;
int main(){
string = (char *) malloc(50*sizeof(char));
strcpy(string, "initi1l wording cont2ining forty-nine ch3r4cters.");
printf("BEFORE: %s\n", string);
string = (char *) realloc(string, 24*sizeof(char));
printf("AFTER: %s\n", string);
system("PAUSE");
return 0;
}
Выход:
BEFORE: initi1l wording cont2ining forty-nine ch3r4cters.
AFTER: initi1l wording cont2inia
Обратите внимание на 'a' в конце строки!Я понятия не имею, откуда это, может быть, где-то в куче.Это не из исходного блока данных.Первоначально я использовал realloc () с массивами структур, и он явно повредил данные более значительными способами.
Как я могу обойти эту проблему?