bug来源
定义了map<char, float>mp
,插入值:mp['T']=101.0
,在遍历mp输出的时候,使用了printf
,如下:
printf("%s:%f\n", it->first, it->second);
结果无法输出,报错。
原因
printf
在根据%s
输出时,将给定的值作为字符串的首地址,然后逐个字节输出直至碰到’\0'
。如果给定的值是不是一个字符串的地址,而是字符、数字的话,就会将字符或数字的值作为将打印字符串的首地址,打印,显然,这些随意的值作为地址的话,打印其中的值就会引起莫名其妙的错误了。
上面对应%s
的it->first
就是char
类型的字符,故会出错。