【发布时间】:2016-11-14 18:54:10
【问题描述】:
我很好奇 printf 是如何工作的,我尝试了很多技巧,例如:
printf("Test 1: %hs\n", "hi");
printf("Test 2: %hhs\n", "hi");
printf("Test 3: %ls\n", "hi");
printf("Test 4: %lls\n", "hi");
printf("Test 5: %js\n", "hi");
printf("Test 6: %zs\n", "hi");
printf("Test 7: %ts", "hi");
我正在使用带有 s 说明符和全长修饰符的 printf(通常与数字说明符一起使用(如 d / i / u / o ...),但我得到了奇怪的输出:
Test 1: hi
Test 2: hi
Test 3: Test 4: Test 5: Test 6: hi
Test 7: hi
似乎l / ll / j 长度修饰符使 printf 出现错误并停止工作(它不打印 \n 但与所有其他长度修饰符一起它似乎忽略了长度修饰符并像正常用法一样工作)。
为什么它遵循这种行为?
【问题讨论】:
标签: c printf undefined-behavior libc format-specifiers