看看:
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);
由于
答案 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));
编译器会自动将字符串文字收集到单个块中。