簡體   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