printf与两个unsigned long int的奇怪问题

时间:2010-09-07 01:44:57

标签: c printf

我有这个代码(我正在使用ansi c中的大文件支持)

unsigned long int tmp,final
final=1231123123123213
tmp=final;
    printf("%llu %llu  \n",final,tmp);
    printf("%llu  \n ",tmp);

打印

1231123123123213 0
1231123123123213

我不明白

3 个答案:

答案 0 :(得分:7)

unsigned long int使用的格式说明符为%lu。您正在使用%llu,这是unsigned long long int的格式说明符。代码的行为未定义。

你需要决定你想要做什么。使用正确的格式说明符(以匹配类型),或使用正确的类型(以匹配格式说明符)。

答案 1 :(得分:2)

因为您使用了错误的类型。

unsigned long long int tmp, final;

编译器应该抱怨数字常量(文字1231123123123213)不适合long int。它被截断了。另外,%llu用于打印长时间的整数,而不是长整数;)。

答案 2 :(得分:-1)

您需要%lu而不是%llu