[英]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.