-1

入力として削除する c-string と文字を受け取り、インスタンスをeliminate(char *str, int character)スキャンして現在のインデックスの値を置き換える関数を作成しています...何ですか? と思いましたが、これはリスクが高く、c 文字列の null ターミネータに依存する他の関数を台無しにする可能性があります。例えば:strcharacterNULL

char *eliminate(char *str, int character) {
    if (!str) return str;

    int index = 0;
    while (str[index])
       if (str[index] == character)
          str[index++] = '\0'; //THIS LINE IS IN QUESTION
    return str;
}

私の質問は、文字列内の指定された文字のすべてのインスタンスを効果的に削除するように、この関数を適切に実装するにはどうすればよいですか? そして、適切な削除'\0'が置換される文字に割り当てられている場合、これが文字列全体にどのように影響しないのですか (つまり、最初'\0'に遭遇した文字で効果的に終了します)。たとえば、同じ文字列に対して上記の関数を 2 回実行すると、2 回目の呼び出しでは、最後の文字が置換された場所までの文字列のみが検査されます。

4

2 に答える 2