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

时间:2013-03-14 19:15:43

标签: c string long-long

我无法让环礁功能在c中正确设置长long值。这是我的例子:

#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));

这里发生了什么?

1 个答案:

答案 0 :(得分:12)

首先,让我们回答你的问题:

#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(不是stdlib.h中为atoll指定的类型),这就是程序意外执行的原因,但是不会生成错误。如果使用-Wall进行编译,您会看到:

  

警告:隐含声明函数atoll

当人们使用atof而不包括stdlib.h时,这个事实会让人感到震惊,在这种情况下,不会返回预期的double值。

注意:(作为对问题评论之一的回答)如果未包含正确的标题,则可能会截断atoll的结果。