c中的"%*s"

摘自:https://blog.csdn.net/eddie_cm/article/details/79859588

前言
最近在看”Linux程序设计”这本书,书中扫描目录章节的代码示例出现了”%*s”,当时不知何意,经查阅资料后,特来整理一下

正文
“%*s”可以被用在printf和scanf系列函数中,在这两种函数中的含义各不相同

printf
在printf系列函数中,”%s”主要是对字段限定符的补充.一般来说,若想要对一个字符串进行字段限定,可以在”%s”的中间加上数字,例如”%10”.但问题是这个数字只能是常数,若想要在程序运行期间改变字段限定的方式则会很麻烦,而”%*s”则可以添加一个形参代替”“的位置,实现动态输出

printf("%10s\n","hello"); //输出" hello"
printf("%*s\n",10,"hello"); //同上
printf("%*s%s\n",10,"","hello"); //也可以采用这种方式在字符串"hello"前面固定输出10个空格

scanf

在scanf系列函数中,”%*s”用于忽略指定类型的输入的值,使其不会被参数所获取

//例:输入abc123 def456
//第一种情况,正常输入
scanf("%s%s",str1,str2);
printf("%s\n%s\n", str1, str2);

//输出:
abc123
def456

//第二种情况,加"*"
scanf("%*s%s",str1);
printf("%s\n%s\n", str1, str2);

//输出:

def456

 

补充
事实上,星号”*”可以应用于几乎所有转换控制符而不仅仅是字符串类型.也就是说,不论是数值,字符,字符串类型都可以使用其达成一些特殊功用

posted @ 2022-11-16 20:45  LiuYanYGZ  阅读(186)  评论(0编辑  收藏  举报