zoukankan      html  css  js  c++  java
  • sprintf函数

    sprintf函数用法举例

     1 #include<stdio.h>
     2 int main()
     3 {
     4     //1.连接字符串
     5     char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
     6     char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};
     7     char buffer[200];
     8     sprintf(buffer, "%.*s%.*s
    ", sizeof(a1), a1, sizeof(a2), a2); printf("%s
    ", buffer);
     9 
    10     //2.data and place them in the string named buffer.(使用sprintf将各种数据格式化后置于字符数组buffer中)
    11     char str[] = "computer", c = 'L';
    12     int i = 35, j;
    13     float fp = 1.7320534f;
    14     //格式化并打印各种数据到buffer
    15     j  = sprintf(buffer, "String:%s", str);
    16     j += sprintf(buffer + j, "Character:%c", c);
    17     j += sprintf(buffer + j, "Integer:%d", i);
    18     j += sprintf(buffer + j, "Real:%f", fp);                    //sprintf返回被写入buffer的字节数j
    19     //Note:sprintf is deprecated; consider using sprintf_s instead
    20     printf("Output:
    %s
    character count = %d
    
    ", buffer, j); //结束字符‘’不计入内
    21 
    22     //3.格式化数字字符串(大多数场合可以替代itoa函数)
    23     short m = -1; int n = 100;
    24     sprintf(buffer, "%-4d%4d", 123, 4567); printf("%s
    ", buffer);//产生"123 4567"其中123左对齐
    25     sprintf(buffer, "%08x", 4567); printf("%s
    ", buffer);         //产生:"000011D7",小写16进制,宽度占8个位置,左边补0 的等宽格式
    26     sprintf(buffer, "%#04X", (unsigned short)m); printf("%s
    ", buffer);//sprintf是个变参函数,除了前面两个参数之外,后面的参数要保证类型安全
    27     sprintf(buffer, "%.2f", (double)n); printf("%s
    ", buffer); //同上
    28     return 0;
    29 }
    View Code

    分析:
      1.(1)类比打印浮点数的"%m.nf",m 表示占用宽度(字符串长度不足时补空格,超出了则按照实际宽度打印),n表示从相应的字符串中最多取用的字符数,当然也可以前后都只取部分字符。
       (2)如果希望这些格式控制符中指定长度的信息数字是动态的,而不是静态指定的(许多时候程序要到运行时才清楚到底需要取字符数组中的几个字符),而sprintf采用"*"来占用一个本来需要一个指定宽度或精度的常数数字的位置,而实际的宽度或精度可以和其它被打印的变量一样被提供出来。
      3.如果m不进行强制转换,那么函数没有办法仅仅通过一个"%X"得知当初函数调用前参数压栈时被压进来的到底是个4 字节的整型数还是个2 字节的短整型数,则采取统一4字节的处理方式,导致参数压栈时符号扩展成32位的整数-1,由于打印时4个位置不够,会把32位整数-1的8位16进制都打印出来。

    本文参考链接:

     http://baike.baidu.com/link?url=5mhOwQqslSj9dDaAIv2YqSIX4I7WGkNT1ix61dVCPkpwZhFr8P4YHt7AlPeZn6NR85Atrikq-nnwluvW4xR-Nq

    亲爱的读者:如果觉得本文对你有所帮助,请点击推荐,分享给其他人!
  • 相关阅读:
    GmSSL 与 OpenSSL 共存的安装方法
    爬虫之ssh证书警告错误
    逆向so文件调试工具IDA基础知识点
    frida- registernatives获取so层动态注册函数
    绑定方法与非绑定方法, 反射
    Elk stack安装部署
    类的继承和组合
    安装部署kafka和zookeeper集群(三节点)
    ELK stack 生产问题
    Elasticsearch删除数据操作,你必须知道的一些坑
  • 原文地址:https://www.cnblogs.com/zhuangwei/p/5309037.html
Copyright © 2011-2022 走看看