gpt4 book ai didi

c++ - sprintf 未定义行为

转载 作者:太空宇宙 更新时间:2023-11-04 05:38:55 24 4
gpt4 key购买 nike

我似乎找不到这方面的信息:Does using wrong format specifiers in sprintf cause UB like in printf?

我还要问这里是在跟随 UB 吗?

unsigned int x = 5;
printf("%d",x);

或者这个:

unsigned char x = 5;
printf("%d",x);

最佳答案

Does using wrong format specifiers in sprintf cause UB like in printf?

是的。所有 *printf 说明符都定义相同(实际上在 fprintf 部分)。

and I'll ask also here is following UB?

unsigned int x = 5;
printf("%d",x);

这在技术上是 UB。 %d 需要一个 int 参数,并且“如果任何参数不是相应转换规范的正确类型,则行为未定义。” (WG14 N1570,7.21.6.1/p9;与 C99 相比,我认为 C11 在这里没有任何改变)。 unsigned int 不是 int。在实践中,您可能可以侥幸逃脱。

or this:

unsigned char x = 5;
printf("%d",x);

当且仅当 unsigned char 通过整数提升提升为 int 时,这不是 UB,这通常是这种情况。

关于c++ - sprintf 未定义行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24746196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com