String strtoul()未按预期工作?

String strtoul()未按预期工作?,string,hex,strtoull,String,Hex,Strtoull,我正在尝试将字符串(如“0x7ffd01767a60”)转换为十六进制,以便比较指针。不确定这是否是最好的决定 我正在这样做: char *address = "0x7ffd01767a60"; strtol(address,NULL,16); printf("%lp",address); 我得到这个:0x7ffd01764120 编辑:似乎我打印字符串地址时忽略了函数返回。谢谢Jens!还有施伦克 解决了!我就是这么做的 char *address = "0

我正在尝试将字符串(如“0x7ffd01767a60”)转换为十六进制,以便比较指针。不确定这是否是最好的决定

我正在这样做:

    char *address = "0x7ffd01767a60";

    strtol(address,NULL,16);
    printf("%lp",address);
我得到这个:0x7ffd01764120

编辑:似乎我打印字符串地址时忽略了函数返回。谢谢Jens!还有施伦克

解决了!我就是这么做的

    char *address = "0x7ffd01767a60";
    void *p;
    unsigned long int address_hex = strtol(address,NULL,16);
    p = (void*) address_hex;

    printf("%p",p);

printf打印相同的内存地址。

您正在打印字符串本身的地址,同时忽略函数调用的结果。这应该起作用:

const char *address = "0x7ffd01767a60";

unsigned long int address_hex = strtoul(address, NULL, 16);
// Check for errors in errno
printf("%lx\n", address_hex);
另外,就个人而言,我更喜欢代码尽可能明确,这就是为什么我将
16
作为基本参数传递的原因


注意:请阅读有关返回值的文档,以确保正确识别错误。

从何处获取结果?您在这里所要做的就是打印指向字符串的指针
“0x7ffd01767a60”
,该字符串与字符串的内容不同。您希望它做什么
strtoul()
有一个返回值,您可以忽略它。lol。。。现在我明白了。非常感谢。如果我的答案符合你的问题,请考虑接受它。“Jens,对不起,Jens,我是新来的,忘了。”完成。嘿,Jens,它不允许我打印它,是不是应该是%lu而不是%p,因为它是一个长整型?使用%lu我得到:140733653415520@deko:对,我的错。根据文档,
%p
的类型是
void*
指针类型,但
address\u hex
是整数。假设您正在寻找十六进制打印输出,那么在您的情况下使用
%lx
是正确的<代码>%lu产生一个小数。(另外,我避免将整数强制转换为指针,因为在指针宽度与(长)整数宽度不同的体系结构上可能会遇到问题。)