c语言问题:重点解释:sprintf(str1,"%-s%0*d",str2,sizeof(str1)-strlen(str2),0); 这五个参数是干什么的

#include <stdio.h>

main()
{
char str1[20];
char str2[15]="Hello,World!";

sprintf(str1,"%-s%0*d",str2,sizeof(str1)-strlen(str2),0);

printf("str1:[%s][%d]\n",str1,strlen(str1));
},"%-s%0*d是什么啊?

%-s -号表示左对齐,s表示输出字符串,不过由于没有指定宽度所以%-s与%s是一样的效果
%0*d *是占位符,表示具体的宽度由后面的参数来指定, 0表示如果输出的数据长度不够的话以0补足, d表示输出整数,例如 printf("%05d“, 123); 是输出 00123,
printf( "%0*d", 5, 123 ); 也等价于 printf(“%05d”,123);结果也是 00123

你这个例子中,sizeof(str1)的值为20, strlen(str2)的值为12 所以就相当于输出 str2,后面被20-12=8个0
也就是 Hello,World!00000000
温馨提示:答案为网友推荐,仅供参考