调试断言失败(缓冲区太小)构造函数初始化

Posted

技术标签:

【中文标题】调试断言失败(缓冲区太小)构造函数初始化【英文标题】:Debug assertion failed (Buffer too small) constructor initialization 【发布时间】:2016-04-05 12:31:09 【问题描述】:

我写了一个代码...我必须在其中使用“strcpy_s”...程序正在编译但我调试断言失败...我研究了一下发现这个错误是由于不正确“strcpy_s”参数中的大小...但我仔细检查过,我的大小还可以...我不明白为什么它不工作...欢迎任何帮助....期待感谢...还有一个我需要在构造函数本身中初始化构造函数成员(在我的项目中指示...)

来自头文件

class CyclicShift

private:
char fUpperCase[26];//A-Z
char fLowerCase[26];//a-z

public:
CyclicShift();

在.cpp文件中(初始化构造函数)

CyclicShift::CyclicShift()

strcpy_s(fUpperCase, sizeof (fUpperCase), "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
strcpy_s(fLowerCase, sizeof (fLowerCase), "abcdefghijklmnopqrstuvwxyz");

【问题讨论】:

为什么不使用std::string 【参考方案1】:

char 缓冲区的长度必须为 27 chars。对于所有 C 样式字符串都有的 26 个字母,加上一个尾随的 '\0' 字符。

【讨论】:

以上是关于调试断言失败(缓冲区太小)构造函数初始化的主要内容,如果未能解决你的问题,请参考以下文章

如何验证 C++ 构造函数中的输入参数?

.net 核心 Web 应用程序因“提供给函数的缓冲区太小”错误而失败

如何正确调用vulkan.hpp构造函数来获取命令缓冲区?

.NET 和 MySQL 错误 - 对 SSPI 的调用失败...“收到的消息意外或格式错误”和“提供给函数的缓冲区太小”

使用链接的哈希表的析构函数

成员变量得到一个随机值,即使我在构造函数中初始化它 - 为什么?