Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中将字符串转换为long很麻烦_C_String_Long Long - Fatal编程技术网

在C语言中将字符串转换为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

我很难让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 <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编译,并得到了警告。包括正确的库修复了该问题。