在C语言中,memcpy如何处理有符号整数参数?

在C语言中,memcpy如何处理有符号整数参数?,c,memcpy,C,Memcpy,在C语言中,如果我向memcpy函数提供一个有符号整数,特别是一个负整数作为第三个参数,会发生什么 例如: memcpy(destBuf, source, -100*sizeof(source)) memcpy是否会将-100*sizeofsource的结果解释为未签名 谢谢 最后一个参数是无符号的。所以,通过对源代码执行-100*sizeof,您将得到一个巨大的数字,即溢出 这相当于对源代码执行4294967196*大小的操作 编辑:事实上,我刚刚意识到这是错的。它将对源文件执行-100*

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

例如:

 memcpy(destBuf, source, -100*sizeof(source))
memcpy是否会将-100*sizeofsource的结果解释为未签名


谢谢

最后一个参数是无符号的。所以,通过对源代码执行-100*sizeof,您将得到一个巨大的数字,即溢出

这相当于对源代码执行4294967196*大小的操作


编辑:事实上,我刚刚意识到这是错的。它将对源文件执行-100*sizeof,然后将其转换为无符号文件。例如,如果source的sizeof为4,则它将-400转换为unsigned,并给出0xFFFFFE70 4294966896。

最后一个参数为unsigned。所以,通过对源代码执行-100*sizeof,您将得到一个巨大的数字,即溢出

这相当于对源代码执行4294967196*大小的操作


编辑:事实上,我刚刚意识到这是错的。它将对源文件执行-100*sizeof,然后将其转换为无符号文件。例如,如果source的sizeof为4,则它将-400转换为无符号,并为您提供0xFFFFFE70 4294966896。

否,您将复制大量数据,因为-100被视为无符号数是一个巨大的无符号数,类似于FFFFFF9C,大约为40亿。。。将其乘以sizeofsource可能会使其减少一点…

不,您将复制大量数据,因为-100被视为一个无符号数是一个巨大的无符号数,类似于FFFFFF9C,约为40亿。。。将其乘以sizeofsource可能会使其减少一点…

如果他们的乘积对于无符号整数变得如此之大,会发生什么?它会卷起。ie 0xFFFFFF+0x1=0x00000000具体来说,它会将其转换为大小\u t,这样该值将转换为大小\u MAX+1-100*sizeofsource。如果它们的乘积对于无符号整数变得如此之大,会发生什么情况?它将环绕。ie 0xFFFFFF+0x1=0x00000000具体地说,它将把它转换为size\u t,这样该值将转换为size\u MAX+1-100*sizeofsource。