Я пытался написать строку заменить функцию в C, который работает на char *
, который был выделен с помощью malloc()
. Это немного отличается тем , что он будет найти и заменить строки, а не символы в исходной строке.
Это тривиально , чтобы делать , если поиск и замену строка имеет одинаковую длину (или заменить строку короче , чем строка поиска), так как у меня есть достаточно мест выделены. Если я пытаюсь использовать realloc()
, я получаю сообщение об ошибке , что говорит мне , что я делаю двойной бесплатно - что я не вижу , как я, так как я только использую realloc()
.
Может быть, немного кода поможет:
void strrep(char *input, char *search, char *replace) {
int searchLen = strlen(search);
int replaceLen = strlen(replace);
int delta = replaceLen - searchLen;
char *find = input;
while (find = strstr(find, search)) {
if (delta > 0) {
realloc(input, strlen(input) + delta);
find = strstr(input, search);
}
memmove(find + replaceLen, find + searchLen, strlen(input) - (find - input));
memmove(find, replace, replaceLen);
}
}
Программа работает, пока я не пытаюсь realloc()
в случае , когда замененный строка будет длиннее , чем исходная строка. (Он по- прежнему вид работы, это просто выплевывает ошибки, а также результат).
Если это поможет, то вызывающий код выглядит следующим образом:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void strrep(char *input, char *search, char *replace);
int main(void) {
char *input = malloc(81);
while ((fgets(input, 81, stdin)) != NULL) {
strrep(input, Noel, Christmas);
}
}