我有一个关于c的指针转换的问题。
如果我有此签名的函数:
uint8_t input_getc(void)
从stdin读取用户输入。
然后我有一个指针
void* buffer
我将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存储到带有偏移量bufferi所指向的内存位置,那么可以这样做:

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

编辑:
好的,显然在C上允许使用void*的算法,但C++中没有。然而,这样做仍然被认为是不安全的行为。
看这个问题:Pointer arithmetic for void pointer in C

09-05 23:03
查看更多