c中的"%*s"

前言

最近在看”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
    

补充

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

你可能感兴趣的:(学习总结)