printf()变长的格式化输出--经过参数控制

缘起

  • 手上单子有个需求,处理%S7这样格式的模板,7表示长度,仍是变量。
  • 这是20190108左右碰到的问题,20190131整理月度时,整理一下。

过程

第一步

  • 知道需求后,第一步就是用snprintf()去拼字符串了,可能没搜到合适的关键字,一开始没找到合适的方法。html

    • 临时想了个解决方案:先用"%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%。
相关文章
相关标签/搜索