printf不能打印正确的值

我写了一个C代码

#include<stdio.h>
int main()
{
    int a  = 0;
    printf("Hello  World %llu is here %dn",a, 1);
    return 0;
}

它正在打印下面的输出

Hello World 4294967296在这里-1216225312

在编译时出现以下警告

prog.cpp:在函数'int main()'中:

prog.cpp:5:warning:格式'%llu'期望输入'long long unsigned int',但参数2的类型为'int'

我知道我需要将int转换为long long unsigned int,但我无法理解为什么后面的值被损坏的事实。

提前致谢


%llu期望一个64位整数。 但你只给了它一个32位整数。

结果是,printf正在读取的内容相对于您所传递的数据“移位”了32位。 因此,您的“1”没有在正确的位置被读取。

编辑:

现在来解释输出:

a1相隔32位,因为它们都是32位整数。 但是,printf期望第一个参数是64位整数。 因此,它读取它为a + 2^32 * 1这是你的情况4294967296 。 打印的第二个值未定义,因为它已经过了1


由于代码导致未定义的行为
一个未定义的行为本质上意味着所有的投注都关闭。

printf不安全。 在打印类型时,您必须小心地告诉printf正确的格式desrciptor。


您传递给printf()的格式导致它期望在堆栈上有12个字节,但是只能推送8个字节。 因此,它会读取您未推送的4个字节,并为您提供意想不到的输出。

确保你传递了printf()期望的,并注意你的编译器的警告。

链接地址: http://www.djcxy.com/p/72215.html

上一篇: printf not printing the correct values

下一篇: How do I print the size of int in C?