在C语言中将字符串转换为long很麻烦
我很难让Atol函数在c中正确设置long-long值。以下是我的例子:在C语言中将字符串转换为long很麻烦,c,string,long-long,C,String,Long Long,我很难让Atol函数在c中正确设置long-long值。以下是我的例子: #include <stdio.h> int main(void) { char s[30] = { "115" }; long long t = atoll(s); printf("Value is: %lld\n", t); return 0; } 这是怎么回事?首先,让我们回答你的问题: #include <stdio.h> #include <s
#include <stdio.h>
int main(void) {
char s[30] = { "115" };
long long t = atoll(s);
printf("Value is: %lld\n", t);
return 0;
}
这是怎么回事?首先,让我们回答你的问题:
#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;
}
#包括
#包括//这是您缺少的内容
内部主(空){
chars[30]={“115”};
长t=环礁;
printf(“值为:%lld\n”,t);
返回0;
}
那么,让我们讨论并回答“为什么?”:
#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之前)兼容,在没有先声明函数的情况下使用函数只会从GCC生成警告,而不是错误(正如这里的第一条注释所指出的,C89中也允许隐式函数声明,因此生成错误是不合适的,这是仅生成警告的另一个原因)。但此类函数的返回类型假定为int
(例如,不是atol
的stdlib.h
中指定的类型),这就是程序意外执行但不生成错误的原因。如果使用-Wall
编译,您将看到:
警告:函数的隐式声明atol
当人们使用atof
而不包括stdlib.h
时,这一事实最让人震惊,在这种情况下,预期的double
值不会返回
注:(作为对问题注释之一的回答)这就是为什么如果没有包含正确的标题,
Atol
的结果可能会被截断的原因。在IDEOne和我的计算机上都试过了,没有问题吗?这是所有的代码吗?对我来说都一样。工作正常。哪个编译器,哪个版本,有任何警告吗(-Wall
通用条款)。您缺少#include
,因此环礁岛的结果可能会被截断。感谢Paul R!解决了此问题。次要点-隐式声明在C89中很好,GCC默认为该声明,因此错误不合适。感谢您的出色响应!我按照建议使用-Wall编译,并得到了警告。包括正确的库修复了该问题。