将char数组转换为C中的void *指针

时间:2014-05-23 13:51:55

标签: c pointers void

我想从输入中读取一个地址(如0x827483),并将该地址保存在void *变量中。 首先,我将此地址设为长变量:

while(c != ' ' && !feof(file))
{
    if('0' <= c && c <= '9')
        num = c - '0';
    else if('a' <= c && c <= 'f')
        num = c - 'a' + 10;
    b = b * 16 + num;
    c = fgetc(file);
    s[i++] = c;
}

然后我把它变成无效*。

void * adr = (void *) b;

我的代码正在运行,但我收到了警告。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

警告告诉您long long整数,void *大小不同。最有可能的是,long long是64位而void *是32位。

如果您只需构建32位代码,则可以使用void * adr = (void *)(long)b

我认为更好的解决方案是使用uintptr_t代替long long。这将确保大小兼容32位和64位代码。


作为旁注,从文件中读取内存地址是一种不安全且危险的做法。在以任何方式使用它之前,您需要验证指针是否有用。