缘起
- 手上单子有个需求,处理
%S7
这样格式的模板,7表示长度,还是变量。 - 这是20190108左右碰到的问题,20190131整理月度时,整理一下。
过程
第一步
-
知道需求后,第一步就是用
snprintf()
去拼字符串了,可能没搜到合适的关键字,一开始没找到合适的方法。- 临时想了个解决方案:先用"%10d"取出10位来,然后用数组去接,循环到变量,这样实现是没问题的,但总觉得太土了,于是下班回家。
第二步
- 回家琢磨不太对,又网上搜了一下,找到了一个帖子运用“%%-%ds"和"%%0%dd",实现输出格式参数化,一试解决了我的问题。
-
make后是没问题,第2天提交代码后cppcheck,出现了 warning: format not a string literal, argument types not checked。 这是字符串变量与字符串常量的问题
- 解决方案是屏蔽到这种cppcheck,没找到合适的方案。
代码
- 第一步的代码 暂时没找到,后面补上
- 第二步的代码
char s[10] = {0};
char sValue[16] = {0};
snprintf(s,sizeof(s),"%%0%dd",iNum); // iNum是变量
snprintf(sValue, sizeof(sValue), s, "业务代码值"); // s就相当于格式化输出
收获
- 还是要搞懂需求,需求明确了,然后找方法(先实现,再优化)。
- 上学的时候格式化输出没太管,印象中刷题的时候老会用到,有时会由于这种问题,导致不到100%。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。