当前位置: 首页 > 编程技术 > 正文

sscanf的细节说明

sscanf和scanf的最大的不同就是scanf的对象一般是输出的IO设备,但是Sscanf可以是另外的一个变量

sscanf的MSDN定义:

int sscanf(
const char *buffer,
const char *format [,
argument ] ...
);


其中第一个参数是读取的buffer的地址

第二个参数为格式,比如 %d ,%o,%x等

第三个参数为输出的变量的地址,假设整形变量a的话,那么地址为&a

这里只是简单的介绍下sscanf的格式输出,sscanf也提供了强大的过滤等输出功能,具体的实现可以百度

这里要纠正一点就是,sscanf的格式是将源地址的数据作为指定的格式输出到目的地址中,而不是将源地址的数据安装指定的格式转换到目的地址

比如:

char tmp[255];
sscanf("12-34-56-78-89-9A",“%02x-%02x-%02x-%02x-%02x-%02x”,tmp);

上面的代码的意思就是取”-“前面的两位内容作为十六进制输出到tmp所在的地址中

假设tmp的地址为a

那么在内存中a地址开始的内存的十六进制内容为:

12 34 56 78 89 9A

可以看出sscanf将12当成十六进制来处理了

那么同样下面的代码

int tmp;

sscanf("863","%o“,&tmp);

你会发现程序的返回值为0,为什么呢?
和前面强调的一样,sscanf是将源地址的数据作为制定的格式输出到目的地址中

我们知道8进制每一位最大的是7,也就是说,一个8进制表示的数不可能存在有一位为8的情况,那么自然就会导致sscanf返回为0了,因为sscanf没有成功转换

通过上面的我们可以知道,当我们在使用sscanf进行格式输出时,一定要注意的就是sscanf将源地址的内容作为格式转换到目的地址,而不是将源地址的内容转换为指定的格式后保存到目的地址



本文固定链接: http://kuaile.in/archives/830 | 蒲公英的博客

该日志由 蒲公英 于2012年04月11日发表在 编程技术 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: sscanf的细节说明 | 蒲公英的博客
关键字:

sscanf的细节说明:等您坐沙发呢!

发表评论


You must enable javascript to see captcha here!

快捷键:Ctrl+Enter