我想使用'sprintf()'连接字符串,但运行时检查失败(变量'szBuffer1'周围的堆栈已损坏)。
void main()
{
char szBuffer1[128] = { 0 };
char szBuffer2[16] = { 0 };
gets_s(szBuffer1, sizeof(szBuffer1));
gets_s(szBuffer2, sizeof(szBuffer2));
sprintf_s(szBuffer1 + strlen(szBuffer1), sizeof(szBuffer1), "%s", szBuffer2);
puts(szBuffer1);
printf("%d", strlen(szBuffer1));
}
我认为这是堆栈溢出问题,所以我将'szBuffer1'的内存大小从64增加到128,但它不起作用。
1条答案
按热度按时间zte4gxcn1#
给定输入:
声明:
将相当于:
但缓冲区中剩余的字节是
128 - 5
,而不是128
。将其更改为:sprintf_s
返回写入的字节数。在对printf()
的调用中使用它的返回值,而不是像这样调用strlen()
: