繁体   English   中英

strtoull“似乎”返回错误值

[英]strtoull “seems” to return a wrong value

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

#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但可以打印4298c42 8被砍掉了。 我尝试了没有0x和也没有ULL 但是结果还是一样。 为了确保我不会错过一些琐碎的printf格式说明符,我什至检查了val的内容。 仍然没有用(即未打印成功)

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

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

治愈:确保在使用所有函数之前先声明它们。 如果使用gcc ,则应考虑-Wall-Wextra-Wstrict-prototypes-Wmissing-prototypes-Wold-style-declaration-Wold-style-definition-Werror

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM