printf以%s输出一个字符出错的问题

本文介绍了一个关于使用printf函数输出map<char,float>类型数据时遇到的问题及原因分析。当尝试输出map中char类型的key时,由于printf期望接收字符串而非单一字符,导致输出错误。

bug来源

定义了map<char, float>mp,插入值:mp['T']=101.0,在遍历mp输出的时候,使用了printf,如下:

printf("%s:%f\n", it->first, it->second);

结果无法输出,报错。

原因

printf在根据%s输出时,将给定的值作为字符串的首地址,然后逐个字节输出直至碰到’\0'。如果给定的值是不是一个字符串的地址,而是字符、数字的话,就会将字符或数字的值作为将打印字符串的首地址,打印,显然,这些随意的值作为地址的话,打印其中的值就会引起莫名其妙的错误了。
上面对应%sit->first就是char类型的字符,故会出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值