C语言中的`%*s` 和 `%.*s`
100 Words|Read in about 1 Min|本文总阅读量次
Android源码中有一些经常会遇到的c++基础的内容,笔者对C语言中的%*s
和 %.*s
进行简单熟悉。
C语言中的%*s
和 %.*s
需要区分在scanf
函数还是在printf
函数中使用
scanf
在scanf
中使用,则添加了*
的部分会被忽略,不会被参数获取
1#include <iostream>
2
3int main() {
4 int a = 0;
5 char b[10] = {0};
6 scanf("%d%*s",&a,b);
7 std::cout << a << "\t" << b << std::endl;
8 scanf("%d%s",&a,b);
9 std::cout << a << "\t" << b << std::endl;
10}
结果输出
printf
printf
函数就会有两种写法,一种是%*s
,另外一种是%.*s
%*s
表示用后面的形参替代*
的位置,实现动态格式输出。如果输出的字符串长度小于形参的大小,那么全面用空格补全,即输出至少为形参的大小
%.*s
*
用来指定宽度,对应一个整数。.
(点)是指定必须输出这个宽度。如果所输出的字符串长度大于形参大小,则字符串输出会被截断到形参大小长度,如果小于,则输出实际长度,即输出至多为形参的大小
举例说明
1#include <iostream>
2
3int main() {
4 char s[20] = {0};
5 scanf("%s",s);
6 printf("%*s\n", 10, s);
7 printf("%10s\n", s);
8 printf("%.*s\n", 10, s);
9}
1)输入的字符串小于形参大小
2)输入的字符串大于形参大小
笔者用的IDEA是
Clion
,关于Clion
的获取方式,可以点击这里