直接“printf”到char数组字符串——C语言snprintf函数

发布时间 2023-07-12 23:40:52作者: IZWB-003

注:我写这个只是为了备注并介绍一下这个神器。有关它的更详细用法,互联网的各个角落都不缺少资料。

如果您和曾经的我一样是C语言的初学者,您有可能时常遇到那些“奇异”的字符串处理问题,例如,int里的数转成char数组字符串类型,在char数组中间插入或者删除什么东西,等等。要是采用传统方式这样操作相当令人头大,有时您可能会想要是有一个类似printf的函数能够直接输出到字符串里该多香。

事实上———确实有这么一个函数在。它叫snprintf。原型是:

#include<stdio.h>
int snprintf(char *str, size_t size, const char *format, ...);

用法即:将可变参数 “…” 按照format的格式格式化为字符串,然后再将其拷贝至str中。

仔细看看相当的好理解——就是比printf多了两个参数char *str和size_t size。这其中:

char *str就是该字符串数组的指针。直接输入其名称即可,规则如此。

size_t size是要写入内容的长度。超出该长度-1的内容将被加上‘\0’截断掉。如果想写满整个数组,该参数直接填sizeof(数组名)即可。

后面的参数和printf的用法完全相同。双引号内格式,后面是格式引用。就这样,我们就做到了直接把要写的东西“printf”到char数组里。

来试试看:

#include<stdio.h>
using namespace std;

int main() {
	char test[20];
	int a = 33;
	int b = 25;
	char input[5] = "abcd";
	snprintf(test, sizeof(test), "%d ~ %s ~ %d", a, input, b);
	printf("%s", test);
	return 0;
}

输出如此:

33 ~ abcd ~ 25

Look,随意拼,随意组,字符串,任你走。

那么,一些任务将很简单了:

比如说,int里的数字转成char数组字符串:

char result[4];
int original = 123;
snprintf(result, sizeof(result), "%d", original);

就是这样。

除了当心长度和空间之外,没有什么特别需要注意的。毕竟,记得char数组字符串有个设置好的长度在。