C++ - strcpy_s() 总是失败,即使只复制一个字节到大缓冲区
C++ - strcpy_s() always fails even if copying just one byte to big buffer
感觉一直用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 太小了。即使我尝试仅复制 "one byte" 数据,并分配 128 字节的缓冲区,它也会抛出相同的异常。
此外,我已经检查过 strlen returns 预期值、分配和 "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
。应该在那里工作。
感觉一直用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 太小了。即使我尝试仅复制 "one byte" 数据,并分配 128 字节的缓冲区,它也会抛出相同的异常。
此外,我已经检查过 strlen returns 预期值、分配和 "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
。应该在那里工作。