IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

snprintf容易误解的使用方法

Vimer 2009-11-17 23:18:35 累计浏览 1,657 次
本机暂存

    自从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还有这么多需要注意的地方吧~~~原图已失效

同分类推荐文章

  1. 科技爱好者周刊(第 401 期):如何赚到10亿美元 (2026-06-26 08:05:38)
  2. 如何做决策 - 从 Go 的一个 issue 说起 (2026-06-26 08:00:00)
  3. Seven Player:Windows上播放115网盘视频的增强工具 (2026-06-09 00:06:47)

查看更多 开发者 文章 →

建议继续学习

  1. PHP程序的执行流程 (累计阅读 10,033)
  2. 几个内存相关面试题(c/c++) (累计阅读 9,445)
  3. 一个大二学生有关如何成为一名软件工程师的疑问及答复 (累计阅读 9,181)
  4. nginx自定义模块编写-实时统计模块 (累计阅读 8,731)
  5. C语言中史上最愚蠢的Bug (累计阅读 8,090)
  6. websocket 连接 C Server的尝试 (累计阅读 7,923)
  7. 内存越界的概念和调试方法 (累计阅读 7,277)
  8. Linux C语言编程学习材料 (累计阅读 7,087)
  9. 一次简单C程序的性能优化 (累计阅读 6,852)
  10. 如何学好C语言 (累计阅读 6,432)