SPRINTFF函数

更新时间:2023-06-17 11:52:06 阅读: 评论:0

感觉这几个函数功能还是很强大的,有必要总结一下,主要是从网上摘抄的。

  1.sprintf函数

  sprintf() 格式化输出函数(图形)

  功能 函数sprintf()用来作格式化的输出。

  用法: 此函数调用方式为int sprintf( char *buffer, const char *format [, argument] ... );

  说明: sprintf printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,

  后者则直接在命令行上输出。

  sprintf 是个变参函数,但它的的前两个参数固定,而且精华也在它的第二个参数上面,第一个参数是输入到的指定字符串。需要注意的是如果不指定这个参数,执行过程中出现 "该程序产生非法操作,即将被关闭...."凉拌豆腐干的提示。因为C语言在进行字符串操作时不检查字符串的空间是否够大,所以可能会出现数组越界而导致程序崩溃的问题。即使碰巧,程序没有出错,也不要这么用,因为早晚会出错。所以一定要在调用sprintf之前分配足够大的空间给buf

  其他的一些功能:自《CSDN 社区电子杂志——C/C++杂志》

  (1)格式化数字字符串

  也就是把整数打印到字符串里去,这样用来实现整数到字符串的转换。可以代替itoa这个函数

  //把整数123 打印成一个字符串保存在s 中。


  sprintf(s, "%d", 123); //产生"123"

  可以指定宽度,不足的左边补空格:

  sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567"注意这里123前有5一颗烤瓷牙价钱个空格4567前有4个空格

  当然也可以左对齐:

  sprintf(s, "%-8d%8d", 123, 4567); //产生:"123 4567"

  也可以按照16 进制打印:

  sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 门虽设而常关个位置,右对齐


  sprintf(s, "%-8X", 4568); //大写16 进制,宽度占8 个位置,左对齐

  (2)控制字符串打印精度

  浮点数的打印和格式控制是sprintf 的又一大常用功能,浮点数使用格式符%f”控制,默认保

  留小数点后6 位数字,比如:

  sprintf(s, "%f", 3.1415926); //产生"3.141593"

  但有时我们希望自己控制打印的宽度和小数位数,这时就应该使用:%m.nf”格式,其中m

  示打印的宽度,n 表示小数点后的位数。比如:

  sprintf(s, "%10.3f", 3.1415626); //产生:" 3.142"

  sprintf(s, "%-10.3f", 3.1415626); //产生:"3.142 "

  sprintf(s, "%.3f", 3.1415626); //不指定总宽度,产生:"3.142"

  int i = 100;

  sprintf(s, %.2f, i); //这个结果是会让你很失望的,要想得到100.00必须强制转换(doublei会打出什么东东来?100.00”?对吗?

  (3)第二个较常用的用法是连接字符串

  sprintf的格式控制串中既然可以插入各种东西,并最终把它们连成一串,自然也就能够连接字符串,从而在许多场合可以替代strcat,但sprintf能够一次连接多个字符串(自然也可以同时在它们中间插入别的内容,总之非常灵活)。比如:

  char* who = I;

  char* whom = CSDN;

  sprintf(s, %s love %s., who, whom); //产生:I love CSDN.

  strcat只能连接字符串(一段以’\0’结尾的字 符数组或叫做字符缓冲,null-terminated-string),但有时我们有两段字符缓冲区,他们并不是以’\0’结尾。比如许多从第三方库函 数中返回的字符数组,从硬件或者网络传输中读进来的字符流,它们未必每一段字符序列后面都有个相应的’\0’来结尾。如果直接连接,不管是sprintf 还是strcat肯定会导致非法内存操作,而strncat也至少要求第一个参数是个null-terminated-string,那该怎么办呢?我们
自然会想起前面介绍打印整数和浮点数时可以指定宽度,字符串也一样的。比如:

  char a1[] = {’A', ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’};

  char a2[] = {’H', ‘I’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’};

  正确的写法是

  sprintf(s, %.7s%.7s, a1, a2);//产生:ABCDEFGHIJKLMN

  (4)打印地址

  sprintf提供了专门的%p”:sprintf(s, %p, &i);

  (5sprintf的返回值


  spritnf返回了本次函数调用最终打印到字符缓冲区中的字符数目。也就是说每当一次sprinf调用结束以后,你无须再调用一次strlen便已经知道了结果字符串的长度。如:

  int len = sprintf(s, %d, i); 对于正整数来说,len便等于整数i10进制位数。

  2.sscanf函数

  名称: sscanf() - 从一个字符串中读进与指定格式相符的数据.

  语法: int sscanf( string str, string fmt, mixed var1, mixed var2 ... );

  用法: 以指定的格式 fmt 去解读字符串 str. fmt 中除了 %d %s 以外, 亦可包含其他的字符串作为格式. 每一个 %d 印开头成语 %s 都对应一个参数, 按顺序为 var1, var2 ... %d 读入一个整数到参数中, %s 读入一个字符串.


  * 亦可用于格式中, ( %*d %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)

  常见用法。法拉利是哪个国家的

  char buf[512] = ;

  sscanf("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. 取仅包含指定字符集的字符串。如在下例中,取仅包含19和小写字母的字符串。
校园暴力心得体会
  sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);

  printf("%s\n", buf);

  结果为:123456abcdedf

  5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。

  sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);

  printf("%s\n", buf);

  结果为:123456abcdedf


  6、给定一个字符串iios/12DDWDFF@122,获取 / @ 之间的字符串,先将 "iios/"过滤掉,再将非'@'的一串内容送到buf

  sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf);

  printf("%s\n", buf);

  结果为:12DDWDFF

  7、给定一个字符串““hello, world”,仅保留world。(注意:之后有一空格)

  sscanf(hello, world, "%*s%s", buf);

  printf("%s\n", buf);


  结果为:world

  %*s表示第一个匹配到的%s被过滤掉,即hello被过滤了

  如果没有空格则结果为NULL

  我觉得这个函数掌握这么多久足够用了。跟正则表达式比的haunted功能还是没有正则强大。这个函数还可以用来分割字符串,例如:char ch1[3],ch2[4],ch3[4];

  sscanf("12345678","%2s%3s%3s",ch1,ch2,ch3);

  还可以把字符串转换为数值型

  char num[5]=164.4;


  float force;

  sscanf(num,"%6f",&force); //这里force=164.4

  3.strtok函数

  函数原型:extern char *strtok(char *string, char *ps)

  参数说明:string为源字符串,ps为指定的分隔符,是一个分隔字符串的集合。

  所在库名:#include <string.h>

  函数功能:将字符串string中所有在ps中出现的分隔符替换掉。

  返回说明:返回指向下一个标记串。当没有标记串时则返回空字符NULL

  其它说明:

  当第一次调用strtok函数的时候,strtok函数跳过ps中的第一个分隔符,同时返回在string中的出现的第一个分隔符的位置的指针,用一个空字符'\0'终止。

  通过循环,经过多次调用strtok函数,ps中更多的分隔字符都会被'\0'替换掉,最终输出我们意图实现的字符串。

  实例:

  /**//* MSDN提供 */

  #include <string.h>


  #include <stdio.h>

  char string[] = "A string\tof ,,tokens\nand some more tokens";

  char ps[] = " , \t\n";

  char *token;

  void main( void )

  ...{

  printf( "%s Tokens: ", string );

  token = strtok( string, ps ); /**//* Establish string and get the first token: */

  while( token != NULL )

  ...{

  printf( " %s ", token ); /**//* While there are tokens in "string" */

  token = strtok( NULL, ps ); /**//* Get next token: */

  }

  }

  本文来自CSDN博客,转载请标明出处:blog.csdn/amossavez/archive/2009/07/
19/ 4361535.aspx

 

本文发布于:2023-06-17 11:52:06,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1042458.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:字符串   指定   打印   字符   函数   格式   参数   返回
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图