C语言的类型匹配问题

来源:百度知道 编辑:UC知道 时间:2024/05/27 20:12:35
#include<stdio.h>
void main()
{
long p,q;
p=32768;
q=40000;
printf("p=%u,q=%ld",p,q);
}
在VC下能正常输出,在TC3.0下不能正常输出,在TC下输出p=32768,q=-1673527296,而在TC下则正常输出。不知道为什么?我知道%u和p类型不匹配。
我只是想弄清楚为什么在TC下不能正常输出,在用printf()进行输出的时候数据在内存中是如何变化的,在TC下unsigned占2个字节,而在vc下占4个字节,在TC下32768也没有超出unsigned的范围啊。

改成下面这样就行了.
#include<stdio.h>
void main()
{
long p,q;
p=32768;
q=40000;
printf("q=%ld,p=%u\n",q,p); /*p,q掉换位置*/
}
________
因为在printf("p=%u,q=%ld",p,q); 这句里前面的"p=%
u"与定义的"long"型不符(在内存地址分的字节不同),导
致printf函数读地址,输出数时,只输出了p长整型的前面`
的2个字节; 到输出q时,因为p,q同在一个printf函数里
(它的特征是取地址时是连续的),故p后面2个字节将和q的前2个字节合在一起被%ld输出.而内存里面被划分的且没用到地址里面并不是默认为0,即p后面的没用到的2个字节里面是存了数值的(此数值是不知道,内存本来就有的)合上q前2个字节被当作"q"输出,才造成q出错.
建议你以后同输出数时,最好分开来写
printf("p=%u,",p);
printf("q=%ld",q);

可能这是TC的缺陷吧!唉,有点罗唆,看在我打字那么辛苦的分上20分就给了我吧

你是在学习C语言,而不是在进行产品测试,用devc++吧