printf(“%*.*s”,int,int,char*)在c中是什么意思?

printf(“%*.*s”,int,int,char*)在c中是什么意思?,c,printf,format-specifiers,C,Printf,Format Specifiers,我得到了一个代码片段,其中有一条语句 printf("%*.*s"); %*.*s是什么意思 代码是 char *c="**********"; int i,n=4; for(i=1;i<=n;i++) { printf("%*.*s\n",i,i,c); } 请阅读以下内容的说明: %[flags][width][.precision][length]说明符 s字符串 *宽度不是在格式字符串中指定的,而是作为必须格式化的参数前面的附加整数值参数指定的 对于字符串,宽度是要打印的最小字

我得到了一个代码片段,其中有一条语句

printf("%*.*s");
%*.*s
是什么意思

代码是

char *c="**********";
int i,n=4;
for(i=1;i<=n;i++)
{
printf("%*.*s\n",i,i,c);
}
请阅读以下内容的说明:

%[flags][width][.precision][length]说明符

s
字符串

*
宽度不是在格式字符串中指定的,而是作为必须格式化的参数前面的附加整数值参数指定的

对于字符串,宽度是要打印的最小字符数(可以添加填充)

*
精度不是在格式字符串中指定的,而是作为必须格式化的参数前面的附加整数值参数指定的

对于字符串,精度是要打印的最大字符数

您的程序没有传递所需的可选参数(witdh、精度、要打印的字符串)。行为将是未定义的(可能是崩溃)。

请阅读以下规范:

%[flags][width][.precision][length]说明符

s
字符串

*
宽度不是在格式字符串中指定的,而是作为必须格式化的参数前面的附加整数值参数指定的

对于字符串,宽度是要打印的最小字符数(可以添加填充)

*
精度不是在格式字符串中指定的,而是作为必须格式化的参数前面的附加整数值参数指定的

对于字符串,精度是要打印的最大字符数

您的程序没有传递所需的可选参数(witdh、精度、要打印的字符串)。行为将是未定义的(可能是崩溃)。

首先,让我澄清一下,这里格式字符串中的
*
不是用于打印
*
字符本身的。在这种情况下,它们确实具有特殊的意义


就你而言

 printf("%*.*s");
第一个
*
表示字段宽度,第二个
*
表示精度

*
s都需要一个
int
参数来提供相应的值

引用标准,

如上所述,字段宽度或精度或两者都可用星号表示。在这种情况下,
int
参数提供字段宽度或精度。指定字段宽度或精度或两者的参数(按顺序)应出现在要转换的参数(如果有)之前。负字段宽度参数被视为-标志,后跟正字段宽度。负精度参数被视为省略了精度

因此,转换说明符出现的通用形式是

 %[flags]<field width><precision><length modifier>[conversion specifier character]
%[标志][转换说明符字符]
请注意
中的所有元素都是可选的,只有
[标志]
[转换说明符]
是必需的。也就是说,要求是

零个或多个标志

因此,本质上使
[flags]
也成为可选的

有关更多信息,请参阅
C11
标准第§7.21.6.1章。

首先让我澄清一下,此处格式字符串中的
*
不是用于打印
*
字符本身的。在这种情况下,它们确实具有特殊的意义


就你而言

 printf("%*.*s");
第一个
*
表示字段宽度,第二个
*
表示精度

*
s都需要一个
int
参数来提供相应的值

引用标准,

如上所述,字段宽度或精度或两者都可用星号表示。在这种情况下,
int
参数提供字段宽度或精度。指定字段宽度或精度或两者的参数(按顺序)应出现在要转换的参数(如果有)之前。负字段宽度参数被视为-标志,后跟正字段宽度。负精度参数被视为省略了精度

因此,转换说明符出现的通用形式是

 %[flags]<field width><precision><length modifier>[conversion specifier character]
%[标志][转换说明符字符]
请注意
中的所有元素都是可选的,只有
[标志]
[转换说明符]
是必需的。也就是说,要求是

零个或多个标志

因此,本质上使
[flags]
也成为可选的


有关详细信息,请参阅
C11
标准第§7.21.6.1章。

*精度未在格式字符串中指定,而是作为必须格式化的参数之前的附加整数值参数指定


printf(“%.*s\n”,20,“rabi”)

*精度不是在格式字符串中指定的,而是作为必须格式化的参数前面的附加整数值参数指定的


printf(“%.*s\n”,20,“rabi”)

您需要将此语句的3个参数传递为
printf(“%*.*s”,a,b,str)其中
a
b
是整数,
str
是字符串


它打印出
a
个字符,其中
b
个字符的
str
作为输出的最后一个
b
个字符。第一个
b-a
字符将是空格(“”)。

您需要将此语句的3个参数传递为
printf(“%*.*s”,a,b,str)其中
a
b
是整数,
str
是字符串

它打印出
a
个字符,其中
b
个字符的
str
作为输出的最后一个
b
个字符。第一个
b-a
字符将是空格(“”)。

这意味着在中的一些时间将得到很好的利用。在里面