gpt4 book ai didi

c++ - 将 std::string 分配给未终止的 char 数组时的预期行为?

转载 作者:行者123 更新时间:2023-11-28 06:11:38 25 4
gpt4 key购买 nike

我正在处理由其他人开发的 C++ 代码,并且找到了一个部分,其中 std::string 被分配给一个非空的 char 数组-终止。代码(简化)是这样的:

char *filePath="c:\\filename.txt"; //file known to contain 20 chars per line.
int size=20;
char *buffer;
std::string bufferstr;

buffer=new char[size];
std::ifstream input(filePath, std::ios::in | std::ios::binary);
input.read(buffer,size);
bufferstr=buffer; // Assign string to non-null-terminated char array.

// Lots of other code omitted here.
input.close();
delete[] buffer;

我在用 Dr. Memory 检查代码时发现内存错误并不感到惊讶,现在已经更改了它以便 buffer 始终以 null 终止,但是代码有这个错误大约 3 年,一直按预期运行(在 Windows、Linux 和 Solaris 上),直到我最近对代码中看似无关的部分进行了更改。

我的问题是:
- 将 std::string 分配给非 null 终止的 char 数组时的预期行为是什么?
- 为什么在我在别处进行更改后此代码会开始出现异常?

最佳答案

如果 char 数组是非 null 终止的,则结果为 UB。可能发生的情况是,字符串构造函数迟早会超出分配的缓冲区并遇到空字节。

关于c++ - 将 std::string 分配给未终止的 char 数组时的预期行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31153816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com