我可以在字符串的sprintf中使用sizeof()或#define来提高精度吗?

时间:2010-09-30 21:37:02

标签: c++ c

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

表示字符串(%。Ns)精度。

当我在precsion中使用sizeof或#define长度时,它将其作为实际文本读取。

这是为什么?有什么规则?它只是一个整数值吗?

即。 -

buffer[50];

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

#define MAX_LEN

sprintf (buffer, "%.MAX_LENs", string);  

由于

3 个答案:

答案 0 :(得分:11)

引号内的任何内容都是字符串的一部分,编译器甚至不会想到触摸它。相反,您可以使用'*'让sprintf知道您的精度是一个可以读取的额外参数。另外,你需要'。'在你的精度之前,否则它将是一个垫宽。

sprintf(buffer, "%.*s", (int) sizeof(buffer), string);

答案 1 :(得分:1)

这就是字符串的工作方式; “s”中的任何内容都将被解释为字符串。如果您愿意,可以使用#define数字常量:

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

使用编译时字符串连接。

答案 2 :(得分:1)

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

#define SOMEONES_MIDDLE_NAME "Ray"

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

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

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