You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免printf输出含%的用户输入内容时出现乱码问题

最优雅的解决方案

无需对用户输入字符串做任何修改,直接将固定格式串设为%s,再把用户字符串作为参数传入printf即可:

std::string inputString = "% Test";
printf("%s", inputString.c_str());

运行后直接输出预期结果:% Test

方案原理

printf只会解析**第一个参数(格式控制串)**中的%为格式说明符,放在%s对应参数位置的字符串会被当做普通文本原样输出,完全不会触发格式符解析逻辑。
这个方案相比替换%为%%的方案优势非常明显:

  • 不需要遍历修改原字符串,性能更高
  • 没有修改用户输入的原始内容,逻辑更严谨
  • 从根源避免了格式串注入的安全风险,是官方推荐的标准写法

特殊场景说明

如果你确实有需要将用户字符串作为格式控制串使用的场景(比如要支持用户输入的串里带合法的格式说明符),才需要做%到%%的自动替换,否则都优先用上述%s传参的方案即可。


内容的提问来源于stack exchange,提问作者Clamb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:06:01