sprintf实例

本文通过四个具体示例详细解析了C语言中sprintf函数的使用方法及其格式化输出的细节,包括不同格式符的作用、宽度指定符的影响以及精度指定符的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例子1:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv[])
{
    /* -------------------------------------- */
    char buf[30] = {0};
    sprintf(buf, "%8X" , 123);
    printf("%s\n", buf);

    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%8X" , 100);
    printf("%s\n", buf);

    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%8X" , 84);
    printf("%s\n", buf);

    /* -------------------------------------- */
    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%8x" , 123);
    printf("%s\n", buf);

    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%8x" , 100);
    printf("%s\n", buf);

    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%8x" , 84);
    printf("%s\n", buf);

  /* -------------------------------------- */
   
  memset(buf,
0, sizeof(buf));
   
  sprintf(buf,
"%-8x" , 123);
   
  printf(
"%s\n", buf);


  memset(buf,
0, sizeof(buf));
   
  sprintf(buf,
"%-8x" , 100);
   
  printf(
"%s\n", buf);



  memset(buf,
0, sizeof(buf));
   
  sprintf(buf,
"%-8x" , 84);
   
  printf(
"%s\n", buf);
return 0; }

程序输出:

[root@localhost ~]# ./a.out
      7B
      64
      54
      7b
      64
      54
7b
64
54
[root@localhost ~]#

(1)%X表示大写16进制,%x表示小写16进制;

(2)%8X表示“右对齐”,即串总共占8位,不足补空格;

(2)%-8X表示“左对齐”,即串总共占8位,不足补空格;

 

例子2:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv[])
{
    char buf[30];

    /* -------------------------------------- */
    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%4x" , 123123);
    printf("%s\n", buf);  // 原样输出

    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%4x" , 10000);
    printf("%s\n", buf);  // 原样输出

    /* -------------------------------------- */
    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%-4x" , 123123);
    printf("%s\n", buf);

    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%-4x" , 10000);
    printf("%s\n", buf);

    return 0;
}

程序输出:

[root@localhost ~]# ./a.out
1e0f3
2710
1e0f3
2710
[root@localhost ~]#

(1)当串的宽度超过或等于,格式说明符所指定的宽度时,格式说明符不起作用,串原样输出。

 

例子3:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv[])
{
    char buf[30];

    /* -------------------------------------- */
    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%08x" , 123123);
    printf("%s\n", buf);

    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%08x" , 10000);
    printf("%s\n", buf);

    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%08x" , 84);
    printf("%s\n", buf);

    /* -------------------------------------- */
    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%@8x" , 123123);
    printf("%s\n", buf);

    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%@8x" , 10000);
    printf("%s\n", buf);

    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%@8x" , 84);
    printf("%s\n", buf);

    return 0;
}

程序输出:

[root@localhost ~]# ./a.out
0001e0f3
00002710
00000054
%@8x
%@8x
%@8x
[root@localhost ~]#

(1)这里将左边补0,如果补其他的就不行了。

 

例子4:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv[])
{
    char buf[30];

    /* -------------------------------------- */
    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%5.3s" , "ZhuHaiXiangZhou");
    printf("%s\n", buf);

    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%8.8s" , "ZhuHaiXiangZhou");
    printf("%s\n", buf);

    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%3.8s" , "ZhuHaiXiangZhou");  // 当小数部分大于整数部分的时候,忽略整数部分
    printf("%s\n", buf);

    /* -------------------------------------- */
    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%.5s" , "ZhuHaiXiangZhou");
    printf("%s\n", buf);

    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%.3s" , "ZhuHaiXiangZhou");
    printf("%s\n", buf);

    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%.7s" , "ZhuHaiXiangZhou");
    printf("%s\n", buf);

    return 0;
}

程序输出:

[root@localhost ~]# ./a.out
  Zhu
ZhuHaiXi
ZhuHaiXi
ZhuHa
Zhu
ZhuHaiX
[root@localhost ~]#

(1)在”%m.ns”中,m表示占用宽度(字符串长度不足时补空格,
超出了则按照实际宽度打印),n才表示从相应的字符串中最多取用的字符数。通常在打印字符串时m
没什么大用,还是点号后面的n用的多。 当小数部分大于整数部分的时候,忽略整数部分,如这里的"%3.8s"。

转载于:https://www.cnblogs.com/Robotke1/archive/2013/05/07/3065835.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值