代码之家  ›  专栏  ›  技术社区  ›  T.T.T.

我可以使用sizeof()或a define来定义字符串sprintf中的精度吗?

c c++
  •  2
  • T.T.T.  · 技术社区  · 16 年前

    请看:
    http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/

    对于字符串(%.ns)精度。

    当我使用sizeof或a在precision中定义长度时,它会将其作为实际文本读取。

    这是为什么?规则是什么?它只能是整数值吗?

    即-

    buffer[50];
    
    sprintf (buffer, "%.sizeof(buffer)s", string);  
    

    或

    #define MAX_LEN
    
    sprintf (buffer, "%.MAX_LENs", string);  
    

    谢谢

    3 回复  |  直到 16 年前
        1
  •  11
  •   aschepler    16 年前

    引号内的任何内容都是字符串的一部分,编译器甚至不会考虑触摸它。相反,您可以使用“*”来 sprintf 知道你的精确性是一个它能读到的额外参数。此外,您还需要在精度之前输入“.”,否则它将是一个填充宽度。

    sprintf(buffer, "%.*s", (int) sizeof(buffer), string);
    
        2
  •  1
  •   nmichaels    16 年前

    这就是字符串的工作方式;S中的任何内容都将被解释为字符串。你可以用 #define d个数字常量,如果需要:

    #define MAX_LEN 50
    buffer[50];
    sprintf (buffer, "%" #MAX_LEN "s", string);
    

    它使用编译时字符串连接。

        3
  •  1
  •   Daniel    16 年前

    与您的示例无关,但在类似情况下很重要,如果您a定义如下:

    #define SOMEONES_MIDDLE_NAME "Ray"
    

    您可以将它插入如下字符串:

    sprintf(buffer, "Billy " SOMEONES_MIDDLE_NAME " Cyrus", sizeof(buffer));
    

    编译器将自动将字符串文本收集到单个块中。