我找到了这个C语言片段:
printf("[%d] %.*s\n", cnt++, temp - field, field);
其中temp
和field
为char *
,cnt
为整数。
但我不理解在%.*s
中的格式字符串中使用printf
。
可以 - 任何人帮助我吗?
答案 0 :(得分:1)
您可以在.*
中使用printf
来指定将精度作为参数给出。在您的情况下,该参数是temp - field
,两个指针之间的差异。
答案 1 :(得分:1)
来自某些documentation:
.*
:格式字符串中未指定精度,但作为必须格式化的参数之前的附加整数值参数。
因此,在您的情况下,field
的值为temp-field
,其精度为{{1}}。
这些百分号符号,以供将来参考,称为格式说明符。 (事实上,我通过谷歌搜索找到了这个问题的答案。)
答案 2 :(得分:0)
这个答案分为两部分,
该行正在进行指针运算,一种计算字符串长度的方法;基于您的应用程序中使用的约定。或者
char *string = "abcdef";
char *p1 = string + 3; // def
char *p2 = string + 4; // ef
printf("%s - %s = %d\n", p1, p2, (int) (p1 - p2));
输出
0x400709 - 0x40070a = -1
请注意,p2是一个较短的字符串,但是指针较大。
.number
用于指定整数的精度或字符串的长度。
// number precision
printf("%.2f\n", 100.12345); // 100.12
char *string = "abcdef";
// print the first 3 characters only
printf("%.3s\n", string); // abc
// print the first X characters
int dynamicLength = 2;
printf("%.*s\n", dynamicLength, string); // ab
请注意,使用.*
您所说的是:
在程序运行之前,我还不知道精度。