gpt4 book ai didi

c - 在为副本转换后,我是否需要再次为算术转换空指针?

转载 作者:行者123 更新时间:2023-12-04 09:34:04 24 4
gpt4 key购买 nike

执行该代码时:

void    *ft_memcpy(void *dest, const void *src, size_t n)
{
void *orgdest;

orgdest = dest;
while (n > 0)
{
*(unsigned char *)dest = *(unsigned char *)src;
n--;
dest++;
src++;
}
return (orgdest);
}
void 指针已被类型转换为 unsigned char* 以从 src 复制到 dest。
然后我使用 while 循环中的指针 (dest++; src++;) .我是否应该将它们再次用于算术(因为它们是无效的*,并且不能用于算术),例如 dest = ((unsigned char *)dest + 1) ;或者它们是否已经转换为 unsigned char 类型并且可以使用?

最佳答案

是的,您需要将指针转换为 arithmetic on void * pointers is illegal in C .请注意,增量也不是正确的语法,因此您需要执行

void    *ft_memcpy(void *dest, const void *src, size_t n)
{
void *orgdest;

orgdest = dest;
while (n > 0)
{
*(unsigned char *)dest = *(unsigned char *)src;
n--;
dest = ( unsigned char * ) dest + 1;
src = ( unsigned char * ) src + 1;
}
return (orgdest);
}
请注意,创建 unsigned char * 的本地副本类型更容易理解:
void    *ft_memcpy(void *dest, const void *src, size_t n)
{
const unsigned char *local_src = src;
unsigned char *local_dest = dest;

while (n > 0)
{
*local_dest = *local_src;
n--;
local_dest++;
local_src++;
}
return (dest);
}

关于c - 在为副本转换后,我是否需要再次为算术转换空指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62678530/

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