memmoveを使って文字列から部分文字列を取り除く関数を実装しようとしています。 結果を出力するとき、ソース文字列の正しい位置を使用したように見えますが、部分文字列を正しく移動していないようです。 My機能は次のとおりです。C言語でmemmoveを使って文字列から部分文字列を取り除く
char * removeSubStr(char * str, const char * substr){
char *scan_p, *temp_p;
int subStrSize = strlen(substr);
if (str == NULL){
return 0;
}
else if (substr == NULL){
return str;
}
else if (strlen(substr)> strlen(str)){
return str;
}
temp_p = str;
while(scan_p = strstr(temp_p,substr)){
temp_p = scan_p + subStrSize;
memmove(scan_p, temp_p, sizeof(temp_p)+1);
}
return str;
}
例えば私の出力は、次のとおりです。 文字列を送信する場合、私は戻ってきてる、 を "レム削除rem999を削除してください":
"RMは999を再ovmove OVEしてください"ありがとう!
while(scan_p = strstr(temp_p,substr)){
temp_p = scan_p + subStrSize;
memmove(scan_p, temp_p, sizeof(temp_p)+1);
}
は非常に意味をなさない:
(無関係です。しかし、あなたがstrlen' 'に' substr'を渡す前に、それ以外の場合は、あなたが呼び出しに終わるかもしれない 'SUBSTR == NULL'をテストする必要があります。 'null 'ポインタの' strlen')。 –