我遇到了一些执行此操作的代码:
double a(30.0);
char buff[30];
sprintf(buff , "%.4f%", a);
std::cout << std::string(buff) << "!\n";
我基本上想知道后面的%
,是sprintf()
定义了如果%
之后没有任何内容会发生什么情况?
答案 0 :(得分:2)
根据https://en.cppreference.com/w/cpp/io/c/fprintf,该行为是不确定的:
如果转换规范无效,则行为未定义。
答案 1 :(得分:2)
我相信这会导致不确定的行为。
C11第7.21.6.1节第4段说:
在%之后,依次显示以下内容:
[...]
— 转化说明符字符,用于指定要应用的转化类型。
稍后,第9段说:
如果转换规范无效,则行为未定义。
在您的示例中,百分号后没有转换说明符,我认为这表示该说明无效,从而导致行为不确定。