在C中将字符串转换为long long

我无法通过环礁函数在c中正确设置长long值。 这是我的例子:

#include  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  #include  // 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之前),使用一个没有先声明它的函数只会从GCC生成一个警告,而不是一个错误(正如这里的第一个注释所指出的那样,C89中也允许隐式函数声明,因此产生错误是不合适的,这是为什么只产生警告的另一个原因)。 但是假定这样一个函数的返回类型是int (不是stdlib.hatoll指定的类型),这就是程序意外执行但不会产生错误的原因。 如果用-Wall编译,你会看到:

警告:functionatoll隐式声明

当他们使用atof而不包括stdlib.h ,这个事实大多震撼了人们,在这种情况下,不会返回预期的double值。

注意:( 作为对问题评论之一的回答 )这就是为什么如果不包括正确的标题,可能会截断atoll的结果。