int snprintf(char *str, size_t size, const char *format, ...);

从用snprintf开始,size参数一直传的都是buff_size-1,像这样:

 int main()
{
char *a = "hello"; char tmp[] = {}; snprintf(tmp, , "%s", a); printf("%s\n", tmp); return ;
}

最多允许它往缓冲区格式化4个字符;最后一个字符用来做字符串结束标记的;不能动;

当我跑这段代码时,发现输出的是hel;而我想要它输出的是hell;

这,我开始怀疑人生了;我记得清清楚楚,当时工作的时候还特意规范大家要写size-1的啊;

查manpage,然后我竟然有勇气怀疑manpage是不是在哪个时候改过,标准不一样了;哈哈;

反复试了各种不同长度的格式化,发现我确实错了;

于是发到第一份工作的群里,甩锅给师父;师父表示,这是啥语言,他不知道;哈哈;

总结:

有些自己用了很久的东西,未必是完全正确的,只是恰好没有什么影响而已;通常snprintf也就是用来格式化个字符串,并且缓冲区长度也都比较充足,所以一直以来都没有太注意过这个边界问题;

大神也有知识的盲区,不能过于相信大神说的话,还要自己小心求证;

用的不出问题和用的准确之间还有一段距离,用的准确无误是程序员本应该有的责任感;

吓得我把所有带n版本的字符串操作函数都确认了一遍;

最新文章

  1. mysql-mysql优化
  2. communicate with other processes, regardless of where they are running
  3. Mysql主从库同步错误:1062 Error 'Duplicate entry '1438019'
  4. DNS查询指令nslookup
  5. 关于go的不爽
  6. php 中的closure用法
  7. [ SSH框架 ] Struts2框架学习之一
  8. 洛谷 P2590 [ZJOI2008]树的统计
  9. 在Linux命令行中以图形化窗口打开文件夹
  10. Forth-83 多任务解析
  11. Balanced Number HDU - 3709 数位dp
  12. windows的cmd批处理命令及powershell (二)
  13. HADOOP nutch java mysql
  14. MySQL缓存分类和配置
  15. Priority Queue
  16. python 并发编程(socketserver)
  17. Python之旅:数据类型、字符编码、文件处理
  18. [oracle] oracle-myibatis-整理
  19. Golang build命令解析
  20. git相关网址

热门文章

  1. angular 8 配置路由
  2. [服务器]SSL安装证书教程
  3. vscode编辑器自定义配置
  4. MySQL Backup--Xtrabackup备份参数
  5. /proc路径
  6. [新手必备]Python 基础入门必学知识点笔记
  7. kubectl 命令自动补全
  8. ymPrompt简介
  9. 如何使用MCUXpresso IDE创建一个Cortex-M工程
  10. JavaScript类型转换总结与常见情况解析