gpt4 book ai didi

c++ - 字符串复制说缓冲区太小,strcpy_s源问题

转载 作者:行者123 更新时间:2023-11-30 18:19:53 32 4
gpt4 key购买 nike

我很困惑,如果这很明显,我很抱歉,但是:

int main()
{
char stringDest[20];
char stringSource[20];

strcpy_s(stringDest, stringSource);

return 0;
}

抛出异常“缓冲区太小”。鉴于:

char stringSource[20];

int main()
{
char stringDest[20];

strcpy_s(stringDest, stringSource);

return 0;
}

工作正常。

此外,我认为安全的 strcpy_s(dest, size, source) 的要点是您指定复制的字节数,但是当我这样做时:

int main()
{
char stringDest[20];
char stringSource[20];

strcpy_s(stringDest, 1, stringSource);

return 0;
}

我收到“缓冲区太小异常”。我感到很困惑。为什么在 main() 外部声明变量会产生影响?为什么指定复制1个字节是错误的?

最佳答案

Gives me an unhandled RangeChecks exception, whereas:

C 的数组是零索引的,这意味着对于 char stringSource[20];,当您执行 stringSource[20] = '\0'; 时,元素从 0 到 19。 ,访问超出数组范围,从而导致未定义的行为。

Throws the exception "Buffer is too small". Whereas:

这是因为stringSource是自动存储的并且没有初始化为有效的字符串,使用它会导致未定义的行为。

而第二种情况,当你把char stringSource[20];放在函数之外时,数组是静态存储的,默认情况下用零值初始化,它实际上与char stringSource[20] = "";,这就是本例中 strcpy 成功的原因。

关于c++ - 字符串复制说缓冲区太小,strcpy_s源问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37187271/

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