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太小。即使我尝试只复制"一个字节"的数据,并分配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
,它是缓冲区的实际大小。应该在那里工作。
相关文章:
- 程序错误地读取了二进制文件的一个字节
- 解压缩串联的 zlib 流而不读取下一个字节
- 一次读取一个字节的 unicode
- 如何从 int 一次写入一个字节的文件?C++
- 如何将一个字节数组正确地恢复为C 中的对象
- 我正在尝试修改一个字节数组并通过 JNI 将其从 c++ 发送到 java
- 快速简单的方法,以C++为单位一次读取一个字节的 stdin
- 如何编写一个字节表示为c 中的文件
- 两个 4 位位字段加起来不等于一个字节的大小 - 如何修复?
- GCC 编译器一个字节中有多少位
- 处理Huffman压缩/减压中的最后一个字节
- 如何在-120到120之间更改int到char(或其他简单保存为一个字节的简单方法)
- Winapi WriteFile 函数写入一个字节
- C RLE BMP压缩跳过了最后一个字节
- mbtowc在osx上总是返回一个字节
- C 将一个字节与字母进行比较
- 有可能在c++中创建一个占用不到一个字节内存的类型吗
- Qt串行端口有时会丢失最后一个字节
- (C++)ReadProcessMemory-读取一个字节时出现问题
- 将一个字节数组从Unity C#传递到C++库方法中