ont*_*cks 0 c++ printf string-literals
如何将原始字符串文字R
与固定宽度整数类型的格式宏一起使用?
例如
std::int64_t num = INT64_MAX;
std::printf(R"("name":"%s", "number":"%")" PRId64, "david", num); // wrong syntax
Run Code Online (Sandbox Code Playgroud)
输出应该是
"name":"david", "number":"9223372036854775807"
Run Code Online (Sandbox Code Playgroud)
R
不允许使用转义序列代替
首先,您应该检查当前的格式字符串puts()
。
#include <cstdio>
#include <cinttypes>
int main(void) {
std::puts(R"("name":"%s", "number":"%")" PRId64);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果:
"name":"%s", "number":"%"ld
Run Code Online (Sandbox Code Playgroud)
现在您会看到错误:
"
您在%
和之间还有额外的钱ld
。"
后失踪ld
。在此基础上,修复格式字符串:
"name":"%s", "number":"%"ld
Run Code Online (Sandbox Code Playgroud)
结果:
"name":"david", "number":"9223372036854775807"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
848 次 |
最近记录: |