是否定义了sprintf(b,“%”)?

时间:2020-06-23 10:30:32

标签: c++ c

我遇到了一些执行此操作的代码:

double a(30.0);
char buff[30];
sprintf(buff , "%.4f%", a);
std::cout << std::string(buff) << "!\n";

我基本上想知道后面的%,是sprintf()定义了如果%之后没有任何内容会发生什么情况?

2 个答案:

答案 0 :(得分:2)

根据https://en.cppreference.com/w/cpp/io/c/fprintf,该行为是不确定的:

如果转换规范无效,则行为未定义。

答案 1 :(得分:2)

我相信这会导致不确定的行为。

C11第7.21.6.1节第4段说:

在%之后,依次显示以下内容:
[...]
转化说明符字符,用于指定要应用的转化类型。

稍后,第9段说:

如果转换规范无效,则行为未定义。

在您的示例中,百分号后没有转换说明符,我认为这表示该说明无效,从而导致行为不确定。

相关问题