3_1_snprintf函数的使用(侯捷STL笔记)

3 篇文章 0 订阅

      int snprintf(char *str, int n, char * format [, argument, ...]);
    【参数】str为要写入的字符串;n为要写入的字符的最大数目,超过n会被截断;format为格式化字符串,与printf()函数相同;  argument为变量

      下面实例解析这个函数

      1、向 a 最大写入13个字符 从第[12 - strlen(12345)]的位置写入到第12 之前位置默认为 0

       最后第13位置是 '\0' 即 a[12] = '\0'

    char a[16];
    size_t i;

    i = snprintf(a, 13, "%012d", 12345);  // 第 1 种情况
    printf("i = %lu, a = %s\n", i, a);    // 输出:i = 12, a = 000000012345

       2、最大写入13个字符 从[2 - strlen(12345)]开始写 但是2 - strlen(12345) < 0 数组越界
      所以最后从数组头位置写入至第strlen(12345)个位置 最后第strlen(12345) + 1个位置 a[5] = '\0'

    i = snprintf(a, 13, "%02d", 12345);  // 第 2 种情况
    printf("i = %lu, a = %s\n", i, a);    // 输出:i = 12, a = 12345

     3、最大写入9个字符 从第12 - strlen(12345)个位置开始写到 第12个位置 之前
     全部默认为0 然后将第九个位置之后截断 第10个为'\0'

    i = snprintf(a, 9, "%012d", 12345);   // 第 3 种情况
    printf("i = %lu, a = %s\n", i, a);    // 输出:i = 12, a = 00000001

     4、因为数组的大小只有16,所以当最大写入字符大于16时 默认其为16 位置17为'\0'

    i = snprintf(a, 39, "%018d", 12345);   // 第 4 种情况
    printf("i = %lu, a = %s\n", i, a);    // 输出:i = 12, a = 0000000000000123

  -----------------------------------------------------------------------------------------------------------------------------------------------------------------------

   整体代码

#include <cstdio>
using namespace std;
int main(int argc, char const *argv[]) {
    /*
    int snprintf(char *str, int n, char * format [, argument, ...]);
    【参数】str为要写入的字符串;n为要写入的字符的最大数目,超过n会被截断;format为格式化字符串,与printf()函数相同;argument为变量。
    */
    char a[16];
    size_t i;

    /*向 a 最大写入13个字符 从第[12 - strlen(12345)]的位置写入到第12
     之前位置默认为 0 最后第13位置是 '\0' 即 a[12] = '\0'*/
    i = snprintf(a, 13, "%012d", 12345);  // 第 1 种情况
    printf("i = %lu, a = %s\n", i, a);    // 输出:i = 12, a = 000000012345

    /*最大写入13个字符 从[2 - strlen(12345)]开始写 但是2 - strlen(12345) < 0数组越界
    所以最后从数组头位置写入至第strlen(12345)个位置 最后第strlen(12345) + 1个位置 a[5] = '\0'*/
    i = snprintf(a, 13, "%02d", 12345);  // 第 2 种情况
    printf("i = %lu, a = %s\n", i, a);    // 输出:i = 12, a = 12345

    /*最大写入9个字符 从第12 - strlen(12345)个位置开始写到 第12个位置 之前
    全部默认为0 然后将第九个位置之后截断 第10个为'\0'*/
    i = snprintf(a, 9, "%012d", 12345);   // 第 3 种情况
    printf("i = %lu, a = %s\n", i, a);    // 输出:i = 12, a = 00000001

    /*因为数组的大小只有16,所以当最大写入字符大于16时 默认其为16 位置17为'\0'*/
    i = snprintf(a, 39, "%018d", 12345);   // 第 4 种情况
    printf("i = %lu, a = %s\n", i, a);    // 输出:i = 12, a = 0000000000000123
    return 0;
}

  运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值