所以,我有点受阻。根据man 3 printf我的系统,字符串格式"%5s"应该使用指定的精度来限制从给定的字符串参数打印的字符数。
% 人 3 打印
PRINTF(3) BSD 库函数手册 PRINTF(3)
姓名
printf, fprintf, sprintf, snprintf, asprintf, vprintf, vfprintf,
vsprintf, vsnprintf, vasprintf -- 格式化输出转换
...
s char * 参数应该是一个指向数组的指针
字符类型(指向字符串的指针)。数组中的字符
被写入(但不包括)一个终止 NUL 字符
三; 如果指定了精度,则不超过数字
指定的都是写的。如果给出精度,则不为空
角色需要存在;如果未指定精度,或
大于数组的大小,数组必须包含一个
终止 NUL 字符。
但我的测试代码并没有证实这一点:
#include <stdio.h>
int main()
{
char const * test = "one two three four";
printf("test: %3s\n", test);
printf("test: %3s\n", test+4);
printf("test: %5s\n", test+8);
printf("test: %4s\n", test+14);
return 0;
}
它输出
测试:一二三四 测试:二三四 测试:三四 测试:四
当我认为我应该得到
测试:一 测试:两个 测试:三 测试:四
我做错了什么,还是手册页只是在骗我?
仅供参考:我知道我可以(通常)破解字符串,并插入临时'\0'来终止字符串(除非它是 a char const *,就像这里一样,我必须复制它),但它是一个 PITA(特别是如果我试图在同一个 printf 中打印两半),我想知道为什么精度被忽略了。