printf - 具有固定宽度整数类型格式宏的原始字符串文字

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不允许使用转义序列代替

Mik*_*CAT 5

首先,您应该检查当前的格式字符串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)