1

C では、memcpy 関数の 3 番目の引数として符号付き整数、特に負の整数を指定するとどうなりますか?

例:

 memcpy(destBuf, source, -100*sizeof(source))

の結果は-100*sizeof(source)memcpy によって unsigned として解釈されますか?

ありがとう!

4

2 に答える 2

9

最後のパラメーターは符号なしです。したがって、-100 * sizeof(source)を実行すると、膨大な数が得られます(これはラップアラウンド、つまりオーバーフローになります)。

これは、「4,294,967,196 * sizeof(source)」を実行するのと同じです。

編集:実際、私が気付いたのは間違っています。-100 * sizeof(source)を実行してから、unsignedに変換します。たとえば、sizeof(source)が4の場合、-400をunsignedに変換し、0xFFFFFE70(4,294,966,896)を返します。

于 2010-06-24T08:32:20.293 に答える
2

いいえ、符号なしの数値として見られる-100は、40億程度のFFFFFF9Cのような巨大な符号なしの数値であるため、大量のデータをコピーします... sizeof(source)に乗算しているという事実は少し減らして...

于 2010-06-24T08:32:50.790 に答える