Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2340931
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:08:46

#include

main()
{
 int  a;
 char b;
 int  c;

 char ss[3][10] = {"10\n", "20\n", "30\n" };

 sscanf( ss[0], "%d", &a );
 sscanf( ss[1], "%d", &b );
 sscanf( ss[2], "%d", &c );

 printf( "[%d][%d][%d]\n", a, b, c );

}

先不要上机运行
请问运行结果是什么



变换一下

#include

main()
{
 int  a;
 char b;
 int  c;

 char ss[3][10] = {"10\n", "20\n", "30\n" };

 sscanf( ss[0], "%d", &a );
 sscanf( ss[1], "%s", &b );
 sscanf( ss[2], "%d", &c );

 printf( "[%d][%d][%d]\n", a, b, c );

}
结果又是什么?


在上机看看结果是什么。。。


这个题目可以帮助你了解C的底层数据是怎么处理的。



提示 :

   1.对于sscanf( ss[1], "%d", &b );
ss[1]里面保存的是20,以%d的方式来读取,先把20由字符串转换成长整型,
长整形是32字节,前二十四位是0,后八位是00010100,由于b是char型,占
8个字节,所以从前往后取值,得到8个0,后面全部被截断了,所以结果是0。

2.对于sscanf( ss[1], "%s", &b );
ss[1]里面保存的是20,以%s的方式来读取,20做为字符串传送给b,由于b
是char型,只能取1个字符,所以得到2,由于定义b为char型,要求以%s的
方式输出,所以取到了2的ASCII码,为50。



--------------------next---------------------

阅读(1331) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~