char *
を使用して割り当てられた で動作する文字列置換関数を C で記述しようとしました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");
}
}