我有一個程序,它從命令行獲取格式字符串,它代表多個輸出文件的文件名的格式。它應該只需要一個單一的整數參數,可以替代生成真正的輸出文件名,我想驗證,當我做輸入檢查。什麼是確定格式字符串在C中期望的參數數目的好方法?如何統計C中格式字符串的參數數目?
回答
的接受參數的數量取決於版本的C庫(例如,在C99加入%a
轉換說明)。你可以肯定,這是不大於(即,被除去的所有%%
序列之後剩餘%
字符的數目)轉義%
字符數目加上*
字符的數目(其可以是寬度說明)大。
儘管如此,您應該考慮安全問題;如果用戶提供格式說明符%n
,則可能導致寫入任意內存位置。在其他情況下,供應例如%f
將導致垃圾值被輸出,%s
在任意的存儲器內容中,並且甚至與%d
說明符相關聯,從而允許用戶提供例如字段寬度。 %255d
可能導致緩衝區溢出。考慮一種不同的格式化方案比較聰明替換令牌(可能仍然是%d
),但不允許用戶提供printf
格式字符串。
C99將是一個很好的選擇,我認爲。 「不超過」可能足以滿足我的需求。 –
我在一個值得信賴的環境中工作,所以我並不是很擔心安全問題,但仍然很好理解。我認爲你是對的我只是用給定的字符串替換我的文件編號。 –
「* ......考慮一種不同的格式化方案會更明智一些,例如替換一個令牌(它仍然可以是%d),但不允許用戶提供printf格式的字符串...... *」是的,是的,是的 - **多**更聰明! – alk
- 1. 在C#多行逐字字符串中轉義字符串格式的參數
- 2. 參數計數字符串
- 3. 如何統計字符串內子字符串的數量
- 4. 如何統計字符串中連續重複的字符數
- 5. 從可選參數格式的字符串中讀取格式C/C++
- 6. 長參數的字符串格式
- 7. 格式化字符串參數計數錯誤
- 8. 如何格式化字符串中的參數.format操作
- 9. 如何統計lua字符串中的子數組數量
- 10. 如何從C中的值數組中格式化字符串?
- 11. 傳遞字符串用空格作爲系統參數C++
- 12. 使用目標C中的兩個參數格式化字符串
- 13. 整數的字符串格式c#
- 14. 字符串格式作爲參數?
- 15. 字符串格式自定義參數
- 16. 驗證參數和字符串格式
- 17. 參數字符串格式設置
- 18. 逗號字符串格式參數
- 19. 字符串自動格式參數
- 20. 如何在python中安排多個字符串格式參數
- 21. 如何在Scala中以字符串格式重複參數
- 22. 如何日期格式化格式化字符串中的參數
- 23. HashMap中字符串和計數數目
- 24. 如何在特定字符串中統計unix中的行數
- 25. 如何獲取json格式的字符串格式的數字?
- 26. C:僅使用字符串格式作爲參數的printf
- 27. 格式爲方法參數的字符串(objective-c)
- 28. 如何定義字符串參數必須採用的格式?
- 29. iOS中未使用格式字符串的數據參數
- 30. 如何格式化給定格式的數字字符串?
如果您不需要'printf'的完整通用性,爲什麼不爲模板使用更簡單的結構,以便您可以輕鬆驗證它? – Barmar
什麼格式的字符串? 'printf'的?你至少可以發佈某種示例嗎? – netcoder
對不起,是的,printf樣式格式字符串。而且,當printf隨時可用來完成我可以想象的任何事情時,我並不想爲解析自定義格式而煩惱。 –