Мне нужно динамически добавлять символ в строку, поэтому я использую realloc()
, чтобы добавить больше памяти, когда мне это нужно.
Я новичок в C (из Python), поэтому яЯ много читал, и это было лучшее, что я мог сделать:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void append_to(char *array, char value) {
size_t buffer = (strlen(array) * sizeof(char)) + sizeof(char);
char *new_array = realloc(array, buffer);
if (new_array == NULL) {
printf("CRITICAL ERROR\n");
exit(-1);
}
array = new_array;
int position = strlen(array);
array[position] = value;
}
int main() {
char *list = malloc(sizeof(char));
for (int i = 1; i < 26; i++){
append_to(list, 'a');
printf("%d -> %s\n", i, list);
}
}
Это всего лишь пример, демонстрирующий проблему.Код работает без сбоев до итерации 24, см. Ниже:
1 -> a
2 -> aa
[...] //omitted
23 -> aaaaaaaaaaaaaaaaaaaaaaa
24 -> aaaaaaaaaaaaaaaaaaaaaaaa
25 ->
Чего мне не хватает?