有关printf中特定字符串的问题

时间:2013-12-28 15:55:21

标签: c

我找到了这个C语言片段:

printf("[%d] %.*s\n", cnt++, temp - field, field);

其中tempfieldchar *cnt为整数。

但我不理解在%.*s中的格式字符串中使用printf

可以 - 任何人帮助我吗?

3 个答案:

答案 0 :(得分:1)

您可以在.*中使用printf来指定将精度作为参数给出。在您的情况下,该参数是temp - field,两个指针之间的差异。

答案 1 :(得分:1)

来自某些documentation

  

.*:格式字符串中未指定精度,但作为必须格式化的参数之前的附加整数值参数。

因此,在您的情况下,field的值为temp-field,其精度为{{1}}。

这些百分号符号,以供将来参考,称为格式说明符。 (事实上​​,我通过谷歌搜索找到了这个问题的答案。)

答案 2 :(得分:0)

这个答案分为两部分,

  1. 该行正在进行指针运算,一种计算字符串长度的方法;基于您的应用程序中使用的约定。或者

    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是一个较短的字符串,但是指针较大。

  2. .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
    

    请注意,使用.*您所说的是:

      

    在程序运行之前,我还不知道精度。