strtoull"似乎"返回错误的值

时间:2014-11-29 00:54:42

标签: c printf strtoull

基本上我正在尝试使用unsigned long long values将十六进制字符串转换为strtoull。这是简单的代码

#include <stdio.h>
#include <string.h>


int main ()
{
    unsigned long long val =0;

    //printf("sizeof(unsigned long long)=%d\n", sizeof(unsigned long long));

    val = strtoull("0x8004298c42ULL",NULL,16);

    printf("%llx\n", val);

    if ( val == 0x8004298c42ULL)
    {
        printf("Success\n");
    }
    return 0;
}

我希望val能够打印8004298c42,但会打印4298c428被切断了。我试过没有0x而没有ULL。但结果仍然相同。为了确保我没有错过一些简单的printf格式说明符,我甚至检查了val的内容。仍然没有用(即没有打印成功)

我想我错过了一些微不足道的事情,但不知道是什么!

1 个答案:

答案 0 :(得分:5)

函数strtoull()<stdlib.h>中声明,而不是<string.h>,因此编译器认为它返回int,而不是unsigned long long

治愈:确保在使用之前声明所有函数。如果您使用gcc,则应考虑-Wall-Wextra-Wstrict-prototypes-Wmissing-prototypes-Wold-style-declaration,{{1}的某种组合}和-Wold-style-definition