gpt4 book ai didi

c - Memcpy 类型转换 C

转载 作者:行者123 更新时间:2023-12-02 06:03:55 25 4
gpt4 key购买 nike

我对 C 有点生疏,我正在研究 memcpy 的实现。我想知道为什么你需要将指针 pDst 转换为无符号字符? pSrc 也一样吗?

void memcpy( void *pDst, void *pSrc, int len )
{
int i;

if( pDst == NULL || pSrc == NULL )
return;

for( i=0; i<len; i++ ) {
((unsigned char*)pDst)[i] = ((unsigned char*)pSrc)[i];
}
}

最佳答案

指向 void 的指针是一种有用的简写形式,表示“指向任何东西的指针”,但编译器反过来并不知道所指向的东西有多大。

因此,当您对其进行任何类型的算术运算时(例如将其作为数组进行索引),您必须使用一些明确的大小。在这种情况下,因为您尝试逐字节复制,所以您使用转换为 unsigned char,这通常是表示“1 字节”的一种方式。

(乍一看这似乎是总是是真的。但在memcpy之外的情况下,您可能指向更大的东西,比如某种结构,那么索引/算术实际上指的是该结构大小的增量,因此您可以从一个结构跳到下一个结构。)

关于c - Memcpy 类型转换 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14928555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com