将字符串转换为char *.堆错误
converting a string to a char *. Heap error
我不是C 专家,所以我想知道是否有人可以向我解释此代码出了什么问题。当它删除[] str时,我会得到一个错误
检测到的堆。CRT检测到堆缓冲区结束后,该应用程序写入内存。
这似乎告诉我我的缓冲区还不够大,但是我不明白为什么。
char* foo()
{
std::string s = "01";
char* buffer = new char[s.size()+1];
strncpy_s(buffer, sizeof(buffer), s.c_str(), s.size());
buffer[s.size()] = ' ';
return buffer;
}
int main()
{
char* str = foo()
for (int i = 0; i < strlen(str); ++i)
{
std::cout << str[i];
}
delete[] str;
std::getchar();
return 0;
}
sizeof(buffer)
仅返回指针的大小,而不是指向的缓冲区的大小。缓冲区的正确尺寸为:
const auto bufSize = sizeof( *buffer ) * (s.size() + 1);
或更简单:
const auto bufSize = sizeof( char ) * (s.size() + 1);
正确的字符串副本看起来像:
strncpy_s(buffer, bufSize, s.c_str(), s.size());
好吧,我似乎已经修复了它。sizeof(缓冲区)只是返回4个字节(我猜是指针的大小)。将其更改为缓冲区中的字符数似乎有效。
strncpy_s(buffer, s.size() + 1, s.c_str(), s.size());
相关文章:
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- strncpy之后的char数组的错误行为
- C++错误:初始值设定项过多,无法'char[26]'
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 使用 char* 存储数据和产生的错误
- 为什么将指针重新分配给 1D 数组的 char 时显示错误,但 2D 数组工作正常?
- JavaCPP 错误:无法将参数"1"的"char*"转换为"Abc*
- C++错误:无法将参数 2 从 'char' 隐蔽到 char[]'
- 当我尝试通过构造函数分配 char 数组时出现错误
- 将错误作为从字符串常量到"char*"的已弃用转换 [-Wwrite-strings]
- 获取"rw_ssid"中成员"长度"的错误请求,该成员属于非类类型"char*"
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- C++ [错误] 声明'char '隐藏参数。什么意思?
- 错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"
- 错误:请求成员 .. 是非类类型"char"
- 使用 rapidxml::xml_node::first_attribute 时出现分段错误<char>
- C++错误 - 'char' 和'int'之前的预期主表达式
- 为什么 std::cin 没有给出错误"char"
- 错误:“char(CharStack::)()const throw(CharStack:Underflow)”类型的参
- 错误:char*类型的参数与LPCWSTR类型的参数不兼容