3
ネットワークコードによっては、ソケット上で(2)を送信するためにバッファにパケット構造をエンコードする必要がありますが、エンコードされたバッファをより大きなバッファにmemcpyすることは問題があります。ここで は私がやっているものを示す小さなコードの例です:C memcpyを使用した文字列連結が付加されない
char tbuf[] = "test";
char *buf = malloc(300);
memset(buf, '\0', 300);
int bytes_to_copy = 300;
int bytes_copied = 0;
while (bytes_copied < bytes_to_copy) {
memcpy(buf + bytes_copied, tbuf, sizeof(tbuf));
bytes_copied += sizeof(tbuf);
}
/* free, return */
これはBUFに「テスト」60回を追加する必要がありますが、bufが一つだけ「test」を含む終わります。私はmemcpyを間違って使用していますか?
memcpy(buf + bytes_copied、tbuf、sizeof(tbuf) - 1); – yrmt
これはnulターミネーターが含まれていないのに同じ問題が残っているので、これはうまくいくはずです。 – yrmt
'bytes_copied'をインクリメントする次の行を忘れないでください。 – Elyasin