sprintf(b, "%" ) 是否定义了?
Is sprintf(b, "%") defined?
我遇到了一些这样做的代码:
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 行为是未定义的:
如果转换规范无效,则行为未定义。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- sprintf(b, "%" ) 是否定义了?
- 重载虚拟行为是否定义良好?
- 它是否定义了哪些算法可以接受可变 lambda 的实现?
- 如何检查是否定义了固定宽度的整数
- &*NULL 在C++中是否定义良好?
- C++标准是否定义了结构中成员函数的函数内定义是否必须具有静态链接?
- 将以"_[a-z0-9]"开头和"using"的标识符导入全局命名空间是否定义良
- SFINAE 检测是否定义了类型
- 标准是否定义了共同基础?
- 根据是否定义了另一个宏来评估宏
- 获取未初始化对象成员的地址是否定义良好?
- 如何测试是否定义了结构的成员 (c++)
- 如何测试标准库中是否定义了 std::remove_cvref
- 对非活跃的工会成员使用"std::addressof"是否定义明确
- C++模板 - 几个专业 - 行为是否定义?
- 如何检查是否定义了标头保护
- C++14 是否定义了无符号 int 的填充位上的按位运算符的行为
- C / C++中无符号整数的减法和比较是否定义良好?
- 在比较中使用已强制转换为另一种类型的函数指针是否定义良好?