我遇到麻烦环礁功能正确设置在C长长值。 这是我的例子:
#include <stdio.h>
int main(void) {
char s[30] = { "115" };
long long t = atoll(s);
printf("Value is: %lld\n", t);
return 0;
}
该打印:值为:0
这工作虽然:
printf("Value is: %lld\n", atoll(s));
这里发生了什么?
我遇到麻烦环礁功能正确设置在C长长值。 这是我的例子:
#include <stdio.h>
int main(void) {
char s[30] = { "115" };
long long t = atoll(s);
printf("Value is: %lld\n", t);
return 0;
}
该打印:值为:0
这工作虽然:
printf("Value is: %lld\n", atoll(s));
这里发生了什么?
首先,让我们来回答你的问题:
#include <stdio.h>
#include <stdlib.h> // THIS IS WHAT YOU ARE MISSING
int main(void) {
char s[30] = { "115" };
long long t = atoll(s);
printf("Value is: %lld\n", t);
return 0;
}
那么,让我们来讨论和回答“为什么?”:
对于非常旧的C程序(预C89),使用功能的兼容性,而不必宣布它是第一只产生来自海湾合作委员会的警告,而不是错误(如第一个注释这里所指出的,也隐函数声明被允许在C89,因此产生误差是不恰当的,即另一个原因为何只产生一个警告)。 但这样的函数的返回类型被假定为int
(不是在指定类型stdlib.h
的atoll
为例),这就是为什么程序意外执行,但不会产生错误。 如果用编译-Wall
,你会看到:
警告:函数的隐式声明
atoll
当他们使用这个事实震惊大多人atof
而不包括stdlib.h
,在这种情况下,预期的double
没有返回值。
注:( 作为一个问题的答案的评论之一 )这就是为什么结果的原因atoll
,如果不包含正确的标题可能会被截断。