当前位置: 代码迷 >> C语言 >> [求助]pintf中%lu 连用的问题
  详细解决方案

[求助]pintf中%lu 连用的问题

热度:23   发布时间:2007-10-31 16:33:29.0
[求助]pintf中%lu 连用的问题

#include<stdio.h>
int main(void)
{

printf("%lu\n",21);

system("pause");

}
输出结果是4292542461.
这个值应该是系统所能使用的一个最大的值.
有两个问题想请教:
1.为什么会是这个结果?
2.%lu两个参数的顺序对程序有什么影响?

搜索更多相关的解决方案: pintf  

----------------解决方案--------------------------------------------------------

输出是21阿


----------------解决方案--------------------------------------------------------

我又证实了一下,还是那个结果.不知道跟编译器有没关系?


----------------解决方案--------------------------------------------------------
用dev-c结果:21。
调换l和u位置是:21l。说明%u就可以了。
----------------解决方案--------------------------------------------------------
我用turbo c.调换后是21l.后面的l当普通字符输出了.
要正常输出有很多办法,但是我想知道这个不正常输出的解释.
----------------解决方案--------------------------------------------------------
编译器``问题``

我DEV-C++: %d %ld %u %lu 都是21 %ul 是21l `%l``是什么都没有``



----------------解决方案--------------------------------------------------------
那就应该是编译器问题.
只是不知道能否更深入的帮我分析下这个问题.为什么turbo c的编译器会得出那样的结果?
谢谢
----------------解决方案--------------------------------------------------------
用win-TC的结果是19136533.最后结论,编译器问题.
----------------解决方案--------------------------------------------------------

要深入分析理解```比较困难```我是不能帮你的```

你现在是初学吗``这个问题`先留下吧````以后有机会再说```现在继续学下去```


----------------解决方案--------------------------------------------------------

在tc下

1. %lu 应该是按 无符号长整型输出

2. 4292542461不是系统中 unsigned long 所能表达的最大值

3. 在调用printf 的时候 会将21 压入栈,那么在栈中某个地址会有以int型解释值为21的连续2个字节

printf函数运行中,在输出字符串的时候碰到 %lu 会将刚才压入栈的 21 (占2个字节), 还有之后高地址的两个字 节,

这样是一共连续4个字节的内容 以lu 无符号长整型格式输出,因为高地址的2个字节内容是随机的,所以输出的值会不是21.


21被编译器默认为 int型 你在常量21后加上L就不会这样了把.


----------------解决方案--------------------------------------------------------
  相关解决方案