gpt4 book ai didi

C++ - strcpy_s() 总是失败,即使只复制一个字节到大缓冲区

转载 作者:行者123 更新时间:2023-11-30 02:35:23 26 4
gpt4 key购买 nike

我感觉我一直都是用strcpy来复制字符串,没有任何问题,但是我已经很久没用了,现在怎么弄都搞不定。

我确定我遗漏了一些愚蠢的东西,但我对此感到沮丧有一段时间了,所以我来这里看看是否还有其他人可以提供帮助。

const char* src = "Lalalala";
int strLen = strlen(src);
char* dest = new char[strLen + 1];
ZeroMemory(dest, strLen + 1);
strcpy_s(dest, strLen, src);

这段代码抛出一个异常,说 lBuffer 太小了。即使我尝试只复制“一个字节”的数据,并分配一个 128 字节的缓冲区,它也会抛出相同的异常。

另外,我检查过 strlen 返回预期值、分配和“ZeroMemory”函数调用工作正常,只有在运行 strcpy_s() 函数时程序才会崩溃。我不知道这里发生了什么,请帮忙!

谢谢

最佳答案

strcpy_s 的第二个参数是numberOfElements。这是缓冲区大小,而不是字符串长度。

来自 MSDN :

numberOfElements
Size of the destination string buffer in char units for narrow and multi-byte functions, and wchar_t units for wide functions.

当您在上面的示例中调用 strcpy_s 时,您传递的缓冲区长度为 8,但 strcpy_s 想要复制 9 个字符。字符串的 8 个字符 + 1 个空终止符。它发现缓冲区不够大,然后抛出。

尝试传递 strLen + 1,这是缓冲区的实际大小。应该在那里工作。

关于C++ - strcpy_s() 总是失败,即使只复制一个字节到大缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33676450/

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