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;
}
运行结果