我想从输入中读取一个地址(如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;
我的代码正在运行,但我收到了警告。
我该怎么办?
答案 0 :(得分:0)
警告告诉您long long
整数,void *
大小不同。最有可能的是,long long
是64位而void *
是32位。
如果您只需构建32位代码,则可以使用void * adr = (void *)(long)b
。
我认为更好的解决方案是使用uintptr_t
代替long long
。这将确保大小兼容32位和64位代码。
作为旁注,从文件中读取内存地址是一种不安全且危险的做法。在以任何方式使用它之前,您需要验证指针是否有用。