strcpy_s抛出异常"缓冲区太小"

时间:2015-12-05 18:46:42

标签: c++ visual-studio-2013 strcpy

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岁后开始工作?

1 个答案:

答案 0 :(得分:4)

这是因为strcpy_s()期望源字符串为空终止C-String

你传给它一个char数组。但是你没有null终止数组(因此它不像C-String那样)。当您展开目标时,它只是随机工作,因为它被读取通过pin的末尾,恰好在第14个字节之前在内存中找到zero的字节。

读取传递结束数组是未定义的行为。所以你的程序没有形成。