【问题标题】:Windows API - What is the proper way to use WriteFile to write a std::string?Windows API - 使用 WriteFile 编写 std::string 的正确方法是什么?
【发布时间】:2013-12-22 04:43:09
【问题描述】:
BOOL WINAPI WriteFile(
  _In_         HANDLE hFile,
  _In_         LPCVOID lpBuffer,
  _In_         DWORD nNumberOfBytesToWrite,
  _Out_opt_    LPDWORD lpNumberOfBytesWritten,
  _Inout_opt_  LPOVERLAPPED lpOverlapped
);

WriteFile 采用 const void *。如何将 std::string 转换为 const void * 以便将字符串的内容写入磁盘?

【问题讨论】:

  • 如果您想从文件中读取该信息,最好将长度存储在内容的前面。它使读取数据更容易(您已经知道长度)并且不会因嵌入 NUL 字符的字符串而中断。

标签: c++ winapi


【解决方案1】:

您可以使用c_str() 从您的std::string 获取char *,然后您可以直接将其作为第二个参数传递给WriteFile。如果没有,那么只需将指针转换为LPCVOID

有关c_str()的更多信息,请参阅: std::string to char*

【讨论】:

  • 你不需要投射它。
【解决方案2】:

如您所知,LPCVOID 只是CONST void* 的类型定义。因此,您可以将 const char* 传递给该函数。 std::string 提供了一个名为 c_str() 的函数。不需要强制转换,因为它们都是 const 限定的。

【讨论】:

    猜你喜欢
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多