1 sprintf
#include <stdio.h>
int sprintf(char *str, const char *format, ...);
/*
功能:
根据参数format字符串来转换并格式化数据,然后将结果输出到str指定的空间中,直到 出现字符串结束符 '\0' 为止。
参数:
str:字符串首地址
format:字符串格式,用法和printf()一样
返回值:
成功:实际格式化的字符个数
失败: - 1
*/
例子
#include <stdio.h>
int main()
{
char buf[1024] = {0};
sprintf(&buf[0], "你好,今年我%d岁!", 18);
printf("%s\n", buf);
return 0;
}
2 sscanf
#include <stdio.h>
int sscanf(const char *str, const char *format, ...);
/*
功能:
从str指定的字符串读取数据,并根据参数format字符串来转换并格式化数据。
参数:
str:指定的字符串首地址
format:字符串格式,用法和scanf()一样
返回值:
成功:成功则返回参数数目,失败则返回-1
失败: - 1
*/
格式 | 作用 |
---|---|
%*s或%*d | 跳过数据 |
%[width]s | 读指定宽度的数据 |
%[a-z] | 匹配a到z中任意字符(尽可能多的匹配) |
%[aBc] | 匹配a、B、c中一员,贪婪性 |
%[^a] | 匹配非a的任意字符,贪婪性 |
%[^a-z] | 表示读取除a-z以外的所有字符 |
例子
#include <stdio.h>
#include <string.h>
int main()
{
char buf[100] = "12345abcde";
char data[1024] = {0};
// 跳过前面的数字
sscanf(buf, "%*d%s", data); // 匹配第一个字符是否是数字,如果是,则跳过; 如果不是则停止匹配
printf("%s\n", data);
memset(data, 0, sizeof(data));
sscanf(buf, "%3s", data); // 读取指定宽度数据
printf("%s\n", data);
memset(data, 0, sizeof(data));
sscanf("abcadae1234", "%[a-c]", data); // 匹配a-c中任意字符读取
printf("%s\n", data);
memset(data, 0, sizeof(data));
sscanf("aBcaAb12", "%[aBc]", data); // 匹配aBc中任意一个
printf("%s\n", data);
memset(data, 0, sizeof(data));
sscanf("bBa12", "%[^aB]", data); // 匹配非aB中任意一个
printf("%s\n", data);
memset(data, 0, sizeof(data));
sscanf("123Aabc", "%[^a-z]", data); // 匹配a-z以外的所有字符
printf("%s\n", data);
return 0;
}
// 将已给定字符串helloworld@baidu.com,实现输出helloworld和baidu.com
#include <stdio.h>
int main()
{
char buf[100] = "helloworld@baidu.com";
char data1[100] = {0};
char data2[100] = {0};
sscanf(buf, "%[a-z]%*[@]%s", data1, data2);
printf("%s\n", data1);
printf("%s\n", data2);
return 0;
}