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