sprintf系列函数是否支持忽略格式化字符串中的多余空白字符?
问题解答
sprintf_s以及整个C/C++标准的sprintf系列函数都没有内置参数或配置选项可以自动忽略格式化字符串中的冗余制表符/空白字符。
根本原因是:你代码中用反斜杠续行的写法,会把下一行开头的缩进空白直接包含到格式化字符串字面量中,标准库的字符串处理函数会原样解析字符串里的所有字符,不会自动过滤这类缩进。
推荐修复方案
利用C/C++的相邻字符串字面量自动拼接特性实现代码可读性和输出格式的兼顾:编译器会自动将多个仅用空白分隔的双引号字符串拼接为单个字符串,缩进仅作用于代码层面,不会进入字符串内容。
修复后的代码示例:
sprintf_s(g_msgbuf, "\n" "Active Weapon PID: %d\n" "HitMode: %s\n" "Armor DT: %d\n" "Armor DR: %d\n", ActiveWeaponPID, HitModeStr.c_str(), cur_dmg_thresh, cur_dmg_resist );
其他可选方案
如果坚持用反斜杠续行写法,只需要把续行后的字符串内容顶格书写即可,但会破坏代码的缩进美观度,不推荐:
sprintf_s(g_msgbuf, "\n\ Active Weapon PID: %d\n\ HitMode: %s\n\ Armor DT: %d\n\ Armor DR: %d\n", ActiveWeaponPID, HitModeStr.c_str(), cur_dmg_thresh, cur_dmg_resist );
内容的提问来源于stack exchange,提问作者darek_911
相关产品推荐
相关产品推荐

