关于sprintf、snprintf

sprintf与snprintf

sprintf函数:

int sprintf(char *str, const char *format, …);

参数说明:

  • str:目标字符串的指针
  • format:格式化字符串
  • …:可变参数列表

snprintf函数:

int snprintf(char *str, size_t size, const char *format, …);

参数说明:

  • str:目标字符串的指针
  • size:目标缓冲区的大小,即最多可以放入多少字符,包括结尾的斜杠0
  • format:格式化字符串
  • …:可变参数列表

sprintf的特点:

  • 直接将格式化的字符串写入目标内存区域,直到遇到斜杠0停下
  • 没有对输出的字符串长度进行限制,如果提供的缓冲区不够,会导致缓冲区溢出,有安全风险
  • 返回值:成功,返回写入的字符串长度;失败,返回负数

snprintf的特点:

  • 给指定过大小的内存区域写入数据,可以避免溢出风险
  • 如果格式化的字符串长度小于size,则全部写到内存区域中,在结尾带上斜杠0
  • 如果格式化的字符串长度大于等于size,只将字符串的size-1的字符写入到str中,并在结尾带上斜杠0
  • 返回值:成功,返回预写入的字符串长度,即size-1,因为不包括结尾的斜杠0;失败,返回负数

sprintf的使用:

int main()
{
	char buffer[100];
	int a = 10;
	double b = 3.14;
	string c = "hello";
	sprintf(buffer, "a: %d, b: %lf, c: %s\n", a, b, c.c_str());

	cout << buffer << endl;
	return 0;
}

在这里插入图片描述

snprintf的使用:

int main()
{
	char buffer[100];
	int a = 15;
	double b = 1.14;
	string c = "world";
	snprintf(buffer, sizeof(buffer), "a: %d, b: %lf, c: %s\n", a, b, c.c_str());

	cout << buffer << endl;
	return 0;
}

在这里插入图片描述

总结:snprintf在sprintf的基础上增加了对输出长度的控制,提高了代码的安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值