看到sscanf与sprintf,大家一定会联想他们与scanf、printf的关系。
下面就介绍一下sscanf与sprintf函数:
sscanf:
int sscanf(
const char *buffer,
const char *format [,
argument ] ...
);
sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。举几个例子来说明sscanf函数的用法:
1.
char buf[512];
sscanf("123456 ", "%s", buf);//此处buf是数组名,它的意思是将123456以%s的形式存入buf中!
printf("%s\n", buf); //123456
2.
sscanf("123456 ", "%4s", buf);//取4个字符串存入buf中
printf("%s\n", buf); //1234
3.
char buf[128];
sscanf("123456 abcdedf", "%[^5]", buf); //匹配到5以前的字符
printf("%s\n", buf); //1234
4.
char buf[128];
sscanf("123456abcdedfBCDEF", "%[1-9a-f]", buf); //取在1-9中的数字和a-f的字母,如果取的是1-5中的数字,那么取到最后一个数字就会停止,不会继续往后走。
printf("%s\n", buf); //123456abcdef
sprintf
int sprintf(
char *buffer,
const char *format [,
argument] ...
);
和sscanf的功能相对应,sprintf的功能是把格式化的数据写入某个字符串中。举个例子:
char s[64];
sprintf(s, "%d", 123); //将整数123 打印成一个字符串保存在s中
printf("%s", s);
上一个完整的例子:
产生10 个[0, 100)之间的随机数,并将他们打印到一个字符数组s 中,以逗号分隔开。
#include <stdio.h>
#include<Windows.h>
#include <stdlib.h>
#include <time.h>
#pragma warning(disable:4996)
int main() {
srand(time(0));
char s[64];
int offset = 0;
for (int i = 0; i < 10; i++) {
offset += sprintf(s + offset, "%d,", rand() % 100);
}
s[offset - 1] = '\n';//将最后一个逗号换成换行符。
printf(s);
system("pause");
return 0;
}