sscanf与sprintf是C语言处理字符串的利器,可以用于快速格式化字符串。
我们知道,C语言中的输入和输出函数:printf和scanf第一个参数是格式化输出的内容。
例如%d为整数,%f为浮点等等,%d+%d表示格式为"整数+整数"的格式。总而言之,就是格式化输入或输出的内容。
可以说sscanf,sprintf与scanf,printf的差别在于,后者以用户的输入作为输入输出流,而前者以程序运行内存中的变量作为输入或输出流。
(这么说是不严谨的,只是为了更好的理解嘛。。。)
举个简单的栗子:
#include <stdio.h>
int main(void){
char a[10] = "Hello";
char b[10] = "World";
char str[20];
sprintf(str,"%s %s !",a,b); //将a和b按照 "%s %s !" 的格式输出到str中
puts(str);
return 0;
}
运行结果:
可以理解为sprintf是用第二个参数去格式化后面的量,然后将结果给第一个参数。
再看看sscanf:
#include <stdio.h>
int main(void){
char str[] = "hello world";
char a[10], b[10];
sscanf(str,"%s %s",&a,&b); //将str当作输入流,按照 "%c %c" 格式化并分别给a和b
printf("a = %s,b = %s",a,b);
return 0;
}
运行结果:
使用这两个函数要注意:这两个函数的参数均为:第一个参数为字符串数组,第二个参数为格式,第三个以后的参数为其他变量。
另外,如果字符串数组不是char数组,而是C++的string,不可以直接用sscanf,应该用c_str()函数将string转化为char数组,例如:
sscanf(str.c_str(), "%d", &a);
否则编译器会报无法转换类型的错误