次のように宣言された文字列があります。
str=malloc(sizeof(char)*128);
strncat()
操作を行うと新しい文字が の先頭に書き込まれるように、完全にクリアしたいのですstr
。クリアする必要があるのは、単純化されたバージョンで上書きしているためです (余分な空白を削除しています)。
単純にこれを行うことをお勧めします:
*str = '\0';
バッファの内容全体をクリアする必要はありません。最初の値char
をゼロに設定すると、空の文字列が得られます。
使用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);
}
プレーンの代わりにcallocを使用しますmalloc
か?
何かのようなもの
calloc(128, sizeof(char));
EDITまた、strncat
宛先にヌルで終了する文字列を含める必要はありません。宛先が、追加のヌル文字を含め、連結された結果の文字列を保持するのに十分な大きさであることを確認してください。
また、dasblinkenlight の注意事項として、 と重複してコピーしないでくださいstrncat
。dst[i++] = src[j++]
通常のコピー方法を使用することを検討してください。