我的任务是重新编码 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中,文章提到一定的顺序:
block 引用>%[parameter][flags][width][.precision][length]type
最佳答案
这是未定义的行为,请阅读文档。
基本上,传递一个与说明符期望的类型不同的参数被标准视为未定义的行为。
您还混合了不兼容的说明符,再次“只需阅读文档”,如果您想完全了解 printf(3)
的行为,这是很好的文档.
关于c - C 中 printf 的标志和修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41778719/