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

      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;
}

  运行结果

猜你喜欢

转载自blog.csdn.net/WX_1218639030/article/details/82932773
今日推荐