0

私は、「バー」という単語を含む「text_buff」と呼ばれるヌルで終了し、動的に割り当てられた文字列を持っています。この単語を、元の単語よりも長くても短くてもよい、選択した別の単語に置き換えたい。

これまでのコードは次のとおりです。何が間違っているのかわかりません。

        char * toswap = "newword";
        int diff = strlen(toswap)-strlen("bar");
        int wlocation = strstr(text_buff,"bar")-text_buff;
        if (diff > 0) {
            text_buff = realloc(text_buff,strlen(text_buff)+diff);
            for (i=strlen(text_buff) ; i > wlocation+strlen("bar") -1; --i ){
                text_buff[i+diff] = text_buff[i];
            }
            for (i = 0 ; i < strlen("bar")+1; ++i){
                text_buff[wlocation+i] = toswap[i];

            }
        } else if (diff < 0){
                for (i=wlocation+diff ; i <strlen(text_buff);++i ){
                    text_buff[i]=text_buff[i-diff];
                }
                for (i = 0 ; i < strlen("bar")+1; ++i){
                    text_buff[wlocation+i] = toswap[i];
                }
}
4

2 に答える 2

2

新しい単語を挿入するときのループ条件が間違っています。

        for (i = 0 ; i < strlen("bar")+1; ++i){
            text_buff[wlocation+i] = toswap[i];
        }

そのはず:

        for (i = 0 ; i < strlen(toswap); ++i){
            text_buff[wlocation+i] = toswap[i];
        }

それ以外は、エラー処理がありません。ただし、これが学校の課題である場合は、おそらくエラー処理なしで管理できます。

于 2013-09-27T10:47:16.820 に答える
1

最後の '\0' を 1 文字忘れています。

text_buff = realloc(text_buff,strlen(text_buff)+diff);

そのはず

text_buff = realloc(text_buff,strlen(text_buff)+diff + 1);
于 2013-09-27T14:01:42.940 に答える