gpt4 book ai didi

c++ - sprintf_s 如何避免缓冲区溢出问题

转载 作者:行者123 更新时间:2023-12-04 02:25:12 26 4
gpt4 key购买 nike

Visual Studio 提示我将 sprintf 替换为 sprintf_s,而不是 snprintf

sprintf_s 不需要长度参数,它如何避免缓冲区溢出问题?

最佳答案

有两个版本。一种模板版本尝试推断缓冲区的大小,另一种模板版本用于传递大小。

int sprintf_s<_Size>(char (&_Dest)[_Size], const char *_Format, ...)
int sprintf_s(char * _DestBuf, size_t _SizeInBytes, const char *_Format, ...)

如果第一个推不出来,就得自己传size

所以这样:

char buf[100];

sprintf_s(buf, "%d", 1);

会实例化一个函数模板

sprintf_s<100>();

这将产生一个编译器错误:

char *buf = new char[100];

sprintf_s(buf, "%", 1);

而且你必须使用其他版本才能编译:

sprintf_s(buf, 100, "%d", 1);

关于c++ - sprintf_s 如何避免缓冲区溢出问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68313132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com