我在C++
中遇到过这行代码。我不确定我是否理解语法。两个变量传递给printf
,但只显示一个数字。
printf("Value of bar is: [%.*s]\n", tok->len, tok->ptr);
答案 0 :(得分:7)
格式字符串
%.*s
消耗两个参数。第一个指定精度,第二个是要打印的值。
假设tok->len
的值为3
。然后你问题中的代码相当于:
printf("Value of bar is: [%.3s]\n", tok->ptr);
从良好的文档来源中了解更多相关信息,例如:http://en.cppreference.com/w/cpp/io/c/fprintf
至于在此上下文中的精确度意味着什么,上面的文档源说:
Precision指定要写入的最大字节数。
这是一种略显草率的写作方式。它应该说字符而不是字节。
答案 1 :(得分:3)
来自The flag characters
段下的printf手册页:
精度
一个可选的精度,以句点形式('。')后跟一个 可选的十进制数字串。 而不是十进制数字字符串之一 可以写“*”或“* m $”(对于某些十进制整数m)来指定 精度在下一个参数或第m个参数中给出, 分别为int类型。如果精度为 只是'。',或者精度为负,精度就是 零。这给出了d,i,o出现的最小位数, u,x和X转换,后面出现的位数 a,a,e,E,f和F转换的基数字符,最大值 g和G转换的有效位数,或最大值 要从s 和S的字符串打印的字符数 转化
强调我的。
在您的情况下,%.*s
表示下一个参数表示要解释为要打印的以下字符串参数的最大字符数的精度。
答案 2 :(得分:2)
。* =>精度未在格式字符串中指定,而是作为必须格式化的参数之前的附加整数值参数。