【1】格式化字符串操作函数
终端:printf;
字符:sprintf;
文件:fprintf;
id test_01()
{
char arr[128]="";
sprintf(arr,"%d",123);
printf("%s\n",arr); //123
}
void test_01()
{
int year = 2002;
int month = 12;
int day = 6;
char arr[128]="";
int len = sprintf(arr,"%d年%.2d月%.2d日",year,month,day);
printf("%s\n",arr); //2002年12月06日
printf("%d\n",len); //17 返回的为字符串长度 (不包括'\0');
}
【2】sscanf 解包函数
终端:scnaf;
字符:sscnaf;
文件:fscnaf;
2.1 %s 和 sscanf 遇到空格回车结束提取
注意: %s 提取到的内容是字符串
void test_01()
{
char arr1[128] = "";
char arr2[] ="hello world";
sscanf(arr2,"%s",arr1);
printf("%s\n",arr1);
}
2.2 sscanf提取数值
当sscanf提取数值时 可使用:%d %ld %u %lu等 提取的都是数值(遇到非数值或结束符'\0'结束);
void test_01()
{
char arr[128]="123hello456";
int num;
sscanf(arr,"%d",&num);
printf("%d\n",num); //123
}
2.3 提取字符
当sscanf提取z字符时: %c 提取单个字符
void test_01()
{
char arr[]="hello world";
char ch;
sscanf(arr,"%c",&ch);
printf("%c\n",ch); //h
}
【3】sscanf 进阶
3.1提取指定个数的字符或数值 %4s %4d
void test_01()
{
char arr1[]="helloworld";
char arr2[128]="";
sscanf(arr1,"%4s",arr2);
printf("%s\n",arr2); //hell
}
注意:hello后面补'\0' 注意非法访问
void test_01()
{
char arr[]="12345hello456";
int num;
sscanf(arr,"%4d",&num); //1234
printf("%d\n",num);
}
注意:到达长度或遇到非数值 !(0~9) 都会停止
void test_01()
{
char arr[]="123hello456";
int num;
sscanf(arr,"%4d",&num); //123
printf("%d\n",num);
}
3.2跳过字符串和数值
%*ns 跳过n个字符串
void test_01()
{
char arr1[] = "hello world";
char arr2[128] = "";
sscanf(arr1,"%*6s%s",arr2);
printf("%s\n",arr2); //world
}
%*nd 跳过n个数值
void test_01()
{
char arr[]="hello23456";
int num;
sscanf(arr,"%*5s%3d",&num);
printf("%d\n",num); //234
}
3.3%[a-z] 匹配a-z中任意字符
遇到非a-z字符结束
void test_01()
{
char arr1[]="abABCc";
char arr2[128]="";
sscanf(arr1,"%[a-z]",arr2);
printf("%s\n",arr2); //ab
}
3.4%[aBc] 匹配aBc中的字符
void test_01()
{
char arr1[]="abABCc";
char arr2[128]="";
sscanf(arr1,"%[aBc]",arr2); //a
printf("%s\n",arr2);
}
3.5%[^aBc] 匹配非aBc的任意字符
void test_01()
{
char arr1[]="abABCc";
char arr2[128]="";
sscanf(arr1,"%[^ABC]",arr2); //ab
printf("%s\n",arr2);
}