最后更新于 .

自从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(dest),这是为了dst不溢出. 在snprintf(dest, size, "str: %s\n", src)中如果size-1大于等于"str: %s\n"的长度,则把"str: %s\n"都拷贝到dst, 如果size-1小于"str: %s\n"的长度,则从"str: %s\n"拷贝size-1长度的字符串到dst,并且末尾置\0. 对于返回值,需要注意的是snprintf的返回值是欲写入的字符串长度,而不是实际写入的字符串度。如:

char test[8]; int ret = snprintf(test,5,"1234567890"); printf("%d|%s\n",ret,test);

运行结果为: 10|1234 好啦,想不到一个小小的snprintf还有这么多需要注意的地方吧~~~ 版权所有,转载请注明出处。http://www.vimer.cn

Pingbacks

Pingbacks已打开。

Trackbacks

引用地址

评论

暂无评论

发表评论