相关疑难解决方法(0)

具有lld,ld和d类型标识符的size_t变量的printf

我写了这个小代码:

#include <stdio.h>
int main() {
    size_t temp;
    temp = 100;

    printf("lld=%lld, ld=%ld, u=%u\n", temp, temp, temp);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在带有gcc版本4.1.1 20070105(Red Hat 4.1.1-52)i386 GNU/Linux机器上运行它.这是我得到的输出:

lld=429496729700, ld=100, u=7993461
Run Code Online (Sandbox Code Playgroud)

我可以理解第一个(lld)被打印为垃圾,因为当变量中只有4个字节可用时,printf尝试打印8个字节(用于signed long long表示lld)temp.但是,我无法理解为什么最后一个标识符u被打印为垃圾 - 而在我的理解中,这是最接近的适用标识符size_t.

这里我假设size_tunsigned int(我的i386签名为4个字节).

现在,我对该printf线进行了一些调整:

...
printf("ld=%ld, u=%u, lld=%lld\n", temp, temp, temp);
...
Run Code Online (Sandbox Code Playgroud)

我有一个非常好的答案(lld部分除外).

ld=100, u=100, lld=34331653576851556
Run Code Online (Sandbox Code Playgroud)

有人可以帮我理解我在这里错过了什么吗?

非常感谢您的帮助!

[旁注:我尝试使用gcc -O[0,2]标签开/关切换优化,但观察结果没有任何差异.]

c printf

12
推荐指数
2
解决办法
2万
查看次数

标签 统计

c ×1

printf ×1