自从snprintf代替了sprintf,相信大家对snprintf的使用都不会少,函数定义如下:
int snprintf(char *str, size_t size, const char *format, …);
但是大家在使用snprintf的时候是否真的清楚参数里size的意思呢?看下面的例子:
假设我想将一个char类型的变量打印成2进制,我应该怎么写呢?
之前有个同事这样写的:
char a=‘a’;
char str[20];
snprintf(str,2,“%02x”,a);
对不对呢,错了。
1.2不应该是2,应该是3.
2.也不建议直接写3,应该写sizeof(str)
所以建议的写法是:
char a=‘a’;
char str[3];//再大点也没有问题
snprintf(str,sizeof(str),“%02x”,a);
解释如下:
size是限定最终生成的dest的字符数,最多拷贝size-1个字符; 一般情况下size会取sizeof ...