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

Is sprintf(b, "%") defined?

本文关键字:是否 定义 sprintf      更新时间:2023-10-16

我遇到了一些这样做的代码:

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

基本上我想知道尾随%sprintf()是否在定义如果%之后什么都没有会发生什么?

我相信这会导致未定义的行为。

C11 第 7.21.6.1 节第 4 段说:

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

后来,第9段说:

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

在您的示例中,百分号后面没有转换说明符,我认为这意味着规范无效,从而导致未定义的行为。

根据https://en.cppreference.com/w/cpp/io/c/fprintf 行为是未定义的:

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