1

在 C 语言中,如果我提供一个有符号整数,特别是负整数作为 memcpy 函数的第三个参数,会发生什么?

例子:

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

memcpy 会将结果-100*sizeof(source)解释为无符号吗?

谢谢!

4

2 回答 2

9

最后一个参数是无符号的。所以通过 -100 * sizeof(source) 你会得到一个巨大的数字(这将环绕,即溢出)。

这相当于执行“4,294,967,196 * sizeof(source)”。

编辑:实际上那是错误的,我刚刚意识到。它将执行 -100 * sizeof( source ) 然后将其转换为无符号数。例如,如果 sizeof(source) 为 4,那么它会将 -400 转换为无符号并给您 0xFFFFFE70 (4,294,966,896)。

于 2010-06-24T08:32:20.293 回答
2

不,您将复制大量数据,因为 -100 被视为无符号数是一个巨大的无符号数,例如 FFFFFF9C,大约为 40 亿……事实上,您将它乘以 sizeof(source) 可能减少一点...

于 2010-06-24T08:32:50.790 回答