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
字符将是空格(“”)。这意味着在中的一些时间将得到很好的利用。在里面