_snprintf_s中的错误

时间:2012-05-10 07:54:26

标签: c++ visual-c++ msvcrt

我在_snprintf_s:

中遇到了这个奇怪的错误
int ival = strlen("F(LL)L");
char buff[32];
memset(buff,0,sizeof(buff));
_snprintf_s(buff,strlen("F(LL)L"),_TRUNCATE,"%s","F(LL)L");

在buff中,即使字符串长度计算为6,也只复制"F(LL)"。 如果我将长度参数指定为strlen("F(LL)L") + 1,则复制完整的字符串。

1 个答案:

答案 0 :(得分:7)

_snprintf_s()的第二个参数是目标缓冲区的大小(以字节为单位)。必须为终止NUL字符保留一个字节,这就是为什么不复制输入字符串的最后一个字符的原因。

传递缓冲区的实际大小而不是输入字符串的长度会更好(也更安全):

_snprintf_s(buff, sizeof(buff), _TRUNCATE, "%s", "F(LL)L");