使用 strcat 获取缓冲区溢出错误
getting buffer overflow error using strcat
C++新手,我四处闲逛,试图了解指针和解决问题等复杂系统。我制作了这个简单的程序,它将连接字符字符串。但它总是抛出相同的错误:L'buffer is too small &&0
.
这是我的代码 -
const char* str = "larry";
const char* yo{"is one of the stooges" };
size_t buffer{ std::strlen(str) + std::strlen(yo) + 1 };
std::cout << buffer;
char* buff = new char[buffer];
strcpy_s(buff, strlen(str), str);
strcat(buff, yo);
std::cout << *buff << std::endl;
delete[] buff;
这是我根据要求的程序输出:
27 // the size of buffer
然后程序崩溃。
请指出问题所在。 谢谢
根据 C 标准(K.3.7.1.3 strcpy_s函数(
2 s1 和 s2 都不应为空指针。 s1max 不应 大于 RSIZE_MAX. S1max 不应等于零。S1max 应为 大于 strnlen_s(S2, S1max(。不得进行复制 在重叠的对象之间。
那就是你必须写
strcpy_s(buff, strlen(str) + 1, str);
否则,将不会复制str
指向的字符串的终止零。在这种情况下,下一个调用
strcat(buff, yo);
调用未定义的行为。
要strcpy_s
的第二个参数是目标数组的大小,包括0 字节。但是,您传入源字符串的大小,不包括0 字节。strcpy_s
尝试复制 0 字节,但它不能,因为目标数组应该(如参数所示(太小。将buffer
(不是一个好名称,顺便说一句(作为第二个参数传递给strcpy_s
以正确指示目标大小。
相关文章:
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- 使用 strcat 获取缓冲区溢出错误
- 如何修复此特征矩阵反演溢出错误?
- 如何修复递归函数导致的堆栈溢出错误?C++
- 没有 climits 库的溢出错误
- 当我尝试为结构分配新指针时出现堆栈溢出错误
- 应该如何读取堆缓冲区溢出错误消息?
- 初始化数组并出现堆栈溢出错误
- 将 Vector<int> 推送到 Vector<vector 时出现堆溢出错误<int>>
- 为什么 #include <string> 在这里防止堆栈溢出错误?
- 我在 36603 以上输入的任何数组大小时都会返回"堆栈溢出"错误。如何使字符串能够捕获整个.txt文件?
- Boost::序列化存储结构时的堆栈溢出错误
- GetModuleFilenameEx返回0,getlasterror返回溢出错误.我究竟做错了什么
- std::堆栈和堆栈溢出错误的数组分配
- 为什么编写的代码在执行时出现溢出错误
- C 堆栈溢出错误
- 编译器或 CPU 中的 64 位溢出错误
- 创建DLL导出对象时发生堆栈溢出错误