一、sscanf
sscanf() - 从一个 int
sscanf(const char *buffer,const char *format,[argument ]...);
buffer 存储的数据
format 格式控制字符串
argument 选择性设定字符串
sscanf会从buffer里读进数据,依照argument的设定将数据写回。字符串中读进与指定格式相符的数据.
说明;sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。
1.
常见用法。
char buf[512] ;
sscanf("123456 ", "%s", buf);//此处buf是数组名,它的意思是将123456以%s的形式存入buf中!
printf("%s\n", buf);
结果为:123456
2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
sscanf("123456 ", "%4s", buf);
printf("%s\n", buf);
结果为:1234
3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
sscanf("123456 abcdedf", "%[^ ]", buf);
printf("%s\n", buf);
结果为:123456
4、格式字符串可以有多个
int data1,data2,data3,data4;
char a[]="192.16.1.1";
sscanf(a,"%d.%d.%d.%d",&data1,&data2,&data3,&data4);
printf("data1=%d,data2=%d,data=3%d,data=4%d\n",data1,data2,data3,data4);
结果为:data1 =192,data2 =16,data3= 1,data4 =1;
5\格式字符串可以有多个,可以非常方便的分割IP地址和MAC地址等数据
int data1,data2,data3,data4;
char a[]="192:16:1:1";
sscanf(a,"%d:%d:%d:%d",&data1,&data2,&data3,&data4);
printf("data1=%d,data2=%d,data=3%d,data=4%d\n",data1,data2,data3,data4);
结果为:data1 =192,data2 =16,data3= 1,data4 =1;
6、类似字符串中的用法
用它来分隔类似这样的字符串2006:03:18:
int a, b, c;
sscanf("2006:03:18", "%d:%d:%d", &a, &b, &c);
以及2006:03:18 - 2006:04:18:
char sztime1[16] = "", sztime2[16] = "";
sscanf("2006:03:18 - 2006:04:18", "%s - %s", sztime1, sztime2);
但是后来,我需要处理2006:03:18-2006:04:18
仅仅是取消了‘-’两边的空格,却打破了%s对字符串的界定。
我需要重新设计一个函数来处理这样的情况?这并不复杂,但是,为了使所有的代码都有统一的风格,我需要改动很多地方,把已有的sscanf替换成我自己的分割函数。我以为我肯定需要这样做,并伴随着对sscanf的强烈不满而入睡;一觉醒来,发现其实不必。
format-type中有%[]这样的type field。如果读取的字符串,不是以空格来分隔的话,就可以使用%[]。
%[]类似于一个正则表达式。[a-z]表示读取a-z的所有字符,[^a-z]表示读取除a-z以外的所有字符。
所以那个问题也就迎刃而解了:
sscanf("2006:03:18 - 2006:04:18", "%[0-9,:] - %[0-9,:]", sztime1, sztime2);
8、给定一个字符串"hello,
world",仅保留world。(注意:","之后有一空格,%s遇空格停止,加*则是忽略第一个读到的字符串)
sscanf("hello, world", "%*s%s", buf);
printf("%s\n", buf);
结果为:world
%*s表示第一个匹配到的%s被过滤掉,即hello被过滤了
二、sprintf函数:函数功能:把格式化的数据写入某个字符串
sprintf 是个变参函数,定义如下:
int sprintf( char *buffer, const char *format [, argument] ... );
除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:
例子:
char* who = "I";
char* whom = "CSDN";
sprintf(s, "%s love %s.", who, whom); //产生:"I love CSDN. " 这字符串写到s中
sprintf(s, "%10.3f", 3.1415626); //产生:" 3.142"
分享到:
相关推荐
这是一个JavaScript格式化字符串的工具,详细: http://blog.csdn.net/loocao/archive/2010/01/07/5149420.aspx
用sprintf把整数打印到字符串中,控制浮点数打印格式,连接字符串,以及sprintf返回值的使用。
printf,sprintf,sprintf_s,_snprintf_s,vsprintf,vsnprintf,_vsnprintf_s,_vscprintf等格式化字符串使用与区别例子
在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比...
格式化的字符串的输入,sprintf()
当前,它提供了一组用于在各种替换规则下构建格式化字符串的工具: sprintf C样式格式基于数字的格式基于变量的格式该软件包的主要目的是使产生所有流行样式的格式化字符串变得更加容易。安装您可以使用以下命令从...
这是一个简单的实用程序函数,用于将格式化的字符串写入字符串的单元格数组。 它的工作原理类似于 sprintf,但使用 '\f' 将文本分隔成单元格,就像 '\n' 将文本分隔成行一样。 >> csprintf('%d\f',1:3) 答案 = '1' ...
MCU开发,会遇到较多字符串处理相关的操作,比如连接两个字符串,将浮点类型转化为字符串等等,SPRINTF函数将能够较好的处理该类字符串的操作。
把格式化字符串写入变量中: <?php $number = 9; $str = Beijing; $txt = vsprintf(There are %u million bicycles in %s.,array($number,$str)); echo $txt; ?> 定义和用法 vsprintf() 函数把格式化字符串...
我们都知道在linux下是没有itoa函数的,而又不能通过sprintf实现int转二进制字符串的方式,因此手动编写此代码段,希望可以对大家有帮助。
句法: 计数 = cprintf(样式,格式,...) 描述: CPRINTF 使用内置 SPRINTF 和 FPRINTF 函数接受的完全相同的 FORMAT 参数处理指定的文本。 CPRINTF 然后使用指定的 STYLE 参数在命令行窗口中显示文本。 接受的...
1)echo,print,printf,sprintf 前两个函数是输出字符串.字符串中如果有变量名则被替换成其值. 后两个函数类似于C的同名函数. (2)strchr,strlen,strtok,strrchr,strrev,strstr,strtolower, strtoupper,substr,...
字符串的基本概念 “hello,world!” 像这种由双引号引起来的一串字符称为字符串字面值,简称字符串。 'a' C语言中用单引号引起来的叫做字符 a 用双引号括起来的叫做字符串 注意: C语言是不提供字符串类型的 ,...
printf() 函数输出格式化的字符串。 arg1、arg2、arg++ 参数将被插入到主字符串中的百分号(%)符号处。该函数是逐步执行的。在第一个 % 符号处,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。 注释:如果 %...
接收一个字符串作为参数并返回转义的字符串,该字符串在使用 sprintf() 打印时将重现该字符串。 如果您需要使用 sprintf 编写转义序列,请使用sprintf(escapeString(escapeString(str))) 或者传递单个转义字符串...
Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。 在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。 如下...
STR = MAT2STR2(MAT) 将矩阵 MAT 转换为 MATLAB 字符串STR = MAT2STR2(MAT,FORMAT) 使用 C 中使用的格式字符串来格式化矩阵条目例子: MAT2STR2(rand(4),'%1.2f') 返回值: 0.18 0.54 0.47 0.73 0.98 0.67 0.68 ...
想“把数值转换成16进制字符串”,比如0x00000123转换成字符串"00000123",虽然有函数_itoa可以调用,但是返回结果是"123",用sprintf又不甘心,就自己动手写一个函数DWORDToHexString,附带的HexStringToValue有误...
unicode转换 把一个UNICODE字符串打印到一个指定的字符串空间中。 void sprintf_uni( char * strp , uint16 * unistr ); int32 uni_sprintf(char * dst, const char * format, ...);