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的获取方式,可以点击这里