2010-06-24 99 views
0

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

实施例:

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

可否的-100*sizeof(source)结果通过的memcpy被解释为无符号?

谢谢!

回答

7

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

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

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

+0

如果他们的产品对于无符号整数变得太大会发生什么? – ultrajohn 2010-06-24 09:27:23

+0

它将环绕。即0xFFFFFFFF + 0x1 = 0x00000000 – Goz 2010-06-24 09:30:05

+1

具体来说,它会将其转换为'size_t',以便该值将转换为'SIZE_MAX + 1 - 100 * sizeof(source)'。 – caf 2010-06-24 12:24:24

2

不,你会复制大量的数据,因为-100被看作是一个无符号数是一个巨大的无符号数,就像FFFFFF9C,这是40亿左右......事实上,你将它乘以sizeof (源)可能会减少一点...

相关问题