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