2

次のように宣言された文字列があります。

str=malloc(sizeof(char)*128);

strncat()操作を行うと新しい文字が の先頭に書き込まれるように、完全にクリアしたいのですstr。クリアする必要があるのは、単純化されたバージョンで上書きしているためです (余分な空白を削除しています)。

4

3 に答える 3

13

単純にこれを行うことをお勧めします:

*str = '\0';

バッファの内容全体をクリアする必要はありません。最初の値charをゼロに設定すると、空の文字列が得られます。

于 2012-04-17T15:08:00.237 に答える
4

使用memset:

memset(str, 0, sizeof(char)*128);

これに関係なく、文字列をそれ自体の上に書き込んでいる場合は、使用しないでくださいstrcat- コピーするオブジェクトは重複してはなりません:

重複するオブジェクト間でコピーが行われる場合、動作は未定義です。

文字列は確実にそれ自体と重なっています。

文字列から空白を削除するには、単純な関数を使用して簡単に実現できます。

void remove_space(char* r) {
    char *w = r;
    do { *w = *r++; w += *w && !isspace(*w); } while (*w);
}
于 2012-04-17T15:05:13.333 に答える
3

プレーンの代わりにcallocを使用しますmallocか?

何かのようなもの

calloc(128, sizeof(char));

EDITまた、strncat宛先にヌルで終了する文字列を含める必要はありません。宛先が、追加のヌル文字を含め、連結された結果の文字列を保持するのに十分な大きさであることを確認してください。

また、dasblinkenlight の注意事項として、 と重複してコピーしないでくださいstrncatdst[i++] = src[j++]通常のコピー方法を使用することを検討してください。

于 2012-04-17T15:04:55.677 に答える