我有一个关于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
存储到带有偏移量buffer
的i
所指向的内存位置,那么可以这样做:
((uint8_t*)buffer)[i] = temp;
编辑:
好的,显然在C上允许使用
void*
的算法,但C++中没有。然而,这样做仍然被认为是不安全的行为。看这个问题:Pointer arithmetic for void pointer in C