zoukankan      html  css  js  c++  java
  • C语言 sscanf 和 sprintf函数的说明和使用

    sprintf:

    int sprintf( char *buffer, const char *format [, argument] … ); 功能:把格式化的数据写入buffer容器中(字符串),返回buffer的长度。这里s为一个buffer,类型为字符数组名或者字符指针(需要初始化)。

    sprintf(s, "%d", 123); //产生"123"
    sprintf(s, "%8d%8d", 123, 4567); //产生:"     123    4567"(123前5个字符宽,4567前4个字符宽)
    sprintf(s,"%m.ns",cp);//这里m为m个字符宽,如果输出的多于m个字符,则按实际需要分配宽度,如果少于m个字符则在左边(-m.n时在右边,此时是左对齐)补足不够的字符数的宽度。n为截取cp的前n个字符,后面补''。在格式化到s中时都将加有''结束符。该函数的实际执行过程是:将s和format地址递加,逐个赋值,即:s[i]=format[i](i=0,1,2,……)。

           另外,s如果为数组,跟数组的长度没关系,也就是不会出现值溢出问题,因为这里取的只是首地址,字符多于一个时,首地址递加。当然不管用printf还是sprintf打印到屏幕和打印到字符串中,都是遇''结束的。相反,如果字符数组没有'',调用printf或者sprintf时会出现未知数据。因为函数是直到遇到空字符结束的。

    sscanf:

    sscanf() - 从一个字符串中读进与指定格式相符的数据.
      函数原型:
      int sscanf( string str, string fmt, mixed var1, mixed var2 ... );
      int scanf( const char *format [,argument]... );
      说明:
      sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。
      其中的format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | ' ' | ' ' | 非%符号}
      注:
      1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)
      2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。
      3、width表示读取宽度。
      4、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。
      5、type :这就很多了,就是%s,%d之类。
      6、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值
      支持集合操作:
      %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
      %[aB'] 匹配a、B、'中一员,贪婪性
      %[^a] 匹配非a的任意字符,贪婪性
    注意:在读入的字符串是空字符串时,sscanf函数并不改变待读入到的字符串的值。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    大数的加法
    tomcat jdbc DataSource资料
    转 spring的事务传播
    jmeter系列七(Visualizer的TestElement-ResultCollector)
    jmeter系列六(processor)
    jmeter系列五(Config配置元素)
    jmeter系列四(Visualizer)
    jmeter系列三(控制器controller)
    jmeter系列二(jmeter engine相关)
    jmeter系列一(jmeter界面相关无TestBean)
  • 原文地址:https://www.cnblogs.com/song-ge/p/4777015.html
Copyright © 2011-2022 走看看