本人想问下各位为什么【len = strlen(name) + 3;
printf(“%*s.\n“,len, name】
这段代码片段打印出来
前面只空了3个字符,而没有空6个?照理说不是应该3+3=6个空字符吗?
还有就是本人把+3去掉的打印结果和【printf(“%3s.\n”,name)】是一样的?都没有空出字符
printf(“%*s.\n“,len, name】
这段代码片段打印出来

还有就是本人把+3去掉的打印结果和【printf(“%3s.\n”,name)】是一样的?都没有空出字符

解决方案
40
你这个写法有的编译器是会报错的:field width specifier “*” expects argument of type “int”, but argument 2 has type “char *”
而有的编译器是可以通过的 printf(“%*s”, len, name)
这时 printf 额外接受一个参数作为域宽。假如 name的长度小于 len ,会用空格使长度补足。(name本身长度3,再补3个空格)
你这句话相当于printf(“%6s”, name)
而有的编译器是可以通过的 printf(“%*s”, len, name)
这时 printf 额外接受一个参数作为域宽。假如 name的长度小于 len ,会用空格使长度补足。(name本身长度3,再补3个空格)
你这句话相当于printf(“%6s”, name)
40
没错