バッファ間で文字列を動かすとき、私はしばしばchar*
をデータバッファとして扱い、文字列バッファ(strncpy
、strncat
など)のどれも使用しません。 例:memcpyをstrncpyなどに使うのは悪い習慣ですか?
memcpy(target, src, strlen(src) + 1) // after buffer size checks
//vs
strncpy(target, src, target_size - 1);
target[target_size - 1] = 0;
これは悪い習慣ですか?
編集:私は違いを知っています、これは重複ではなくむしろ標準的な練習の問題です。一度strlen
で、一度memcpy
に -
memcpy(target, src, strlen(src) + 1) // after buffer size checks
の
'target'サイズが少なくともstrlen(src)+ 1バイト長であることを許可すると仮定すると、それを行うことに害はありません。 – pah
文字列の長さを知っていれば、 'memmove()'や 'memcpy()'が良い方法です。文字列の長さがわからない場合、 'str *()'ルーチンは災害になることが多く、 'strncat()'は 'strncpy()'よりも悪いですが、大きなマージンではありません。 –
'memcpy()'は 'strlen(src)+ 1'文字を書き込みます。 'strncpy(target、src、target_size - 1); target [target_size - 1] = 0; 'は' target_size'文字を書き込みます。重要な文字列の長さは '' abc ''のコピーの1024バッファのように大きくなければなりません。 – chux