gpt4 book ai didi

C 从 uint32_t* 转换为 void *

转载 作者:太空狗 更新时间:2023-10-29 15:15:14 24 4
gpt4 key购买 nike

我对 C 的指针转换有疑问。

如果我有一个带有这个签名的函数:

uint8_t input_getc(void)

从 STDIN 读取用户输入。

然后我有一个指针

void* 缓冲区

我将 input_getc() 的返回值存储在其中。转换它的正确方法是什么?

//read user input
for(i = 0; i < SIZE; ++i)
{
uint8_t temp = input_getc();

//copy to void* buffer
*(uint8_t *)(buffer + i) = temp //WAY #1
*(buffer + i) = (void *)temp; //WAY #2
}

这两个是一样的吗?

谢谢

最佳答案

就目前而言,这些方法都无法编译。由于 buffer 是一个 void*,您无法对其进行算术运算,因为它的大小未知。

尚不完全清楚您要将其存储在何处。如果您只是想将 uint8_t 存储到 buffer 指向的内存位置,偏移量为 i,那么可以这样做:

((uint8_t*)buffer)[i] = temp;

编辑:

好吧,显然在 C 中允许对 void* 进行算术运算,但在 C++ 中则不允许。但是,这样做仍然被认为是不安全的行为。

看到这个问题:Pointer arithmetic for void pointer in C

关于C 从 uint32_t* 转换为 void *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8162409/

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