int main()
{
const int SIZE = 4;
char pin[SIZE] = { 1, 2, 3, 4 };
char temp[SIZE+1];
strcpy_s(temp, SIZE+1, pin);
return 0;
}
此代码抛出"缓冲区太小"例外。 但是,如果我生成14或更高温度,它就会开始工作:
char temp[14];
strcpy_s(temp, 14, pin);
^作品^
为什么它只在14岁后开始工作?
答案 0 :(得分:4)
这是因为strcpy_s()
期望源字符串为空终止C-String
。
你传给它一个char数组。但是你没有null终止数组(因此它不像C-String那样)。当您展开目标时,它只是随机工作,因为它被读取通过pin
的末尾,恰好在第14个字节之前在内存中找到zero
的字节。
读取传递结束数组是未定义的行为。所以你的程序没有形成。