c++ - 我对吗 &str[0] 指向 len + 1 大小的缓冲区,包括空终止字符

标签 c++ c++11 winapi

<分区>

是否可以执行以下操作?

auto len = GetWindowTextLengthA(min_area_edit_hwnd);
std::string buffer(len, '\0');
GetWindowTextA(min_area_edit_hwnd, &buffer[0], len + 1);

我的意思是,可以告诉 GetWindowTextA 函数 &buffer[0] 指向大小为 len + 1 的缓冲区吗?它是正确的还是我应该按以下方式创建字符串

std::string buffer(len + 1, '\0');

?

最佳答案

这通常从 C++11 开始是合法的,但您确实必须为空终止符保留一个额外的字符。

在 C++11 之前,这样使用 std::string 是非法的。但是,请注意 buffer.length() 不会仅仅因为 GetWindowTextA\0 放置在其受控序列中间的某处而自动更新。如果您希望字符串的 C 长度与 buffer.length() 一致,您有责任resize() 您的 buffer相应地。

关于c++ - 我对吗 &str[0] 指向 len + 1 大小的缓冲区,包括空终止字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45179314/

相关文章:

c++ - 堆栈展开失败的原因

c++ Qt/Win32 - USB 以编程方式弹出,但仍显示在 QFileSystemModel 和 GetLogicalDrives() 中

c++ - 使用用户定义的转换运算符隐式转换它

C++11 - 将非静态数据成员声明为 'auto'

c++ - 你可以将 pimpl-Class 放入 vector 中吗

c++ - 以非顺序顺序在 vector 中分配值

c++ - WaitCommEvent() 是否报告已经收到的数据?

c++ - 绑定(bind)方法给出错误 10038 (WSAENOTSOCK)

c++ - 获得 Matlab <-> C++ 接口(interface)的最佳方法

c++ - 如何正确实现多重继承?