c - C 中 printf 的标志和修饰符

标签 c printf

我的任务是重新编码 printf 的大部分功能(用 C 语言)。然而,在进行一些测试时,我发现了一个问题:我不明白当用户放置超过 1 个修饰符时标准函数的行为方式(允许的修饰符是 h、hh、l、ll、z 和 j)。
例如:

printf("%hhld", 128) results in 128 printed out;  
printf("%lhhd", 128) results in 128 printed out;  
printf("%lhhd", 9223372036854775807) shows 9223372036854775807;  
printf("%lhhd", 9223372036854775808) shows -9223372036854775808;  
printf("%hhld", 9223372036854775807) shows 9223372036854775807;  
printf("%hhld", 9223372036854775808) shows -9223372036854775808; 

将选择什么修饰符以及 printf 如何选择它?为什么在这种情况下它总是忽略 hh ?

另一个问题是我的 printf 是否应该以随机顺序使用标志和修饰符?因为在wiki中,文章提到一定的顺序:

%[parameter][flags][width][.precision][length]type

最佳答案

这是未定义的行为,请阅读文档。

基本上,传递一个与说明符期望的类型不同的参数被标准视为未定义的行为。

您还混合了不兼容的说明符,再次“只需阅读文档”,如果您想完全了解 printf(3) 的行为,这是很好的文档.

关于c - C 中 printf 的标志和修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41778719/

相关文章:

c - 如何显式压入/弹出到 C 返回堆栈?

c - 如何计算C中两组之间的差异?

c++ - sprintf 精确类型转换导致编译警告

c - 没有说明符的 printf

PHP 格式化带前导零的正负 float

c - 将方法调用放在 for 循环中被认为是不好的做法吗?

c - 我的函数不返回任何东西;终端进入炼狱?

c++ - strcat 目标数组的大小

c - 格式参数太多

c - 无符号整数溢出不 "wrap around"