strtoul() 没有按预期工作?
strtoul() not working as expected?
我正在尝试将诸如“0x7ffd01767a60”之类的字符串转换为十六进制,以便我可以比较指针。不确定这是否是最好的决定。
我正在这样做:
char *address = "0x7ffd01767a60";
strtol(address,NULL,16);
printf("%lp",address);
我得到这个:0x7ffd01764120
编辑:似乎我在打印字符串地址时忽略了函数 return。谢谢延斯!和施伦克。
已解决!这就是我所做的
char *address = "0x7ffd01767a60";
void *p;
unsigned long int address_hex = strtol(address,NULL,16);
p = (void*) address_hex;
printf("%p",p);
printf 打印相同的内存地址。
您正在打印字符串本身的地址,而忽略了 strtoul() 函数调用的结果。这应该有效:
const char *address = "0x7ffd01767a60";
unsigned long int address_hex = strtoul(address, NULL, 16);
// Check for errors in errno
printf("%lx\n", address_hex);
此外,我个人更喜欢代码尽可能明确,这就是我将 16
作为基本参数传递的原因。
注意:请阅读有关 return 值的文档,以确保您正确识别错误。
我正在尝试将诸如“0x7ffd01767a60”之类的字符串转换为十六进制,以便我可以比较指针。不确定这是否是最好的决定。
我正在这样做:
char *address = "0x7ffd01767a60";
strtol(address,NULL,16);
printf("%lp",address);
我得到这个:0x7ffd01764120
编辑:似乎我在打印字符串地址时忽略了函数 return。谢谢延斯!和施伦克。
已解决!这就是我所做的
char *address = "0x7ffd01767a60";
void *p;
unsigned long int address_hex = strtol(address,NULL,16);
p = (void*) address_hex;
printf("%p",p);
printf 打印相同的内存地址。
您正在打印字符串本身的地址,而忽略了 strtoul() 函数调用的结果。这应该有效:
const char *address = "0x7ffd01767a60";
unsigned long int address_hex = strtoul(address, NULL, 16);
// Check for errors in errno
printf("%lx\n", address_hex);
此外,我个人更喜欢代码尽可能明确,这就是我将 16
作为基本参数传递的原因。
注意:请阅读有关 return 值的文档,以确保您正确识别错误。