C程序Printf函数显示unsigned long long类型的异常行为?

时间:2015-09-04 11:14:30

标签: c unix printf solaris

请考虑以下程序并观察输出。

#include <stdio.h>
int main()
{
    unsigned long long val ;
    val =144111444250;
    printf ("%llu\n", val);
    printf ("%u %llu\n",val, val);
    return 0;
}

输出:

   144111444250

   33 10211385600662044705

在第一个printf中使用%llu会得到正确的结果,但在第二个printf中使用%llu会得到错误的结果。

1 个答案:

答案 0 :(得分:6)

这是未定义的行为printf期望unsigned int%u,但您提供unsigned long long int,无论发生什么后再发生编译器的奇思妙想。

printfscanf的格式说明符不仅指示应该如何打印/扫描某些内容,还指出期望的参数类型。如果你撒谎,你不能期望结果是合理的。