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%。
相關文章
相關標籤/搜索