std::ostringstream 到 LPCSTR?
std::ostringstream to LPCSTR?
如何将 std::ostringstream
转换为 LPCSTR
?
std::ostringstream oss;
[...]
LPCSTR result = oss.str();
结果:Error: No suitable conversion function from "std::basic_string<char, std::char_traits<char>, std::allocator<char>>" to "LPCSTR" exists
像这样:
std::string str = oss.str();
LPCSTR cstr = str.c_str();
请注意,您 cstr
仅在 str
的下一次修改之前保持有效。因此,例如,您不能从函数中使用 return cstr
,因为 str
是一个已离开作用域的局部变量。
而不是 return 从这个函数中 LPCSTR
, return std::string
。如果您 returned LPCSTR
,这可以避免处理生命周期问题。如果你 returned LPCSTR
你将不得不分配内存并确保你释放它。这正是您不想在 C++ 代码中做的事情。因此,return std::string
并在调用 Windows API 函数时对该对象调用 c_str()
。
如何将 std::ostringstream
转换为 LPCSTR
?
std::ostringstream oss;
[...]
LPCSTR result = oss.str();
结果:Error: No suitable conversion function from "std::basic_string<char, std::char_traits<char>, std::allocator<char>>" to "LPCSTR" exists
像这样:
std::string str = oss.str();
LPCSTR cstr = str.c_str();
请注意,您 cstr
仅在 str
的下一次修改之前保持有效。因此,例如,您不能从函数中使用 return cstr
,因为 str
是一个已离开作用域的局部变量。
而不是 return 从这个函数中 LPCSTR
, return std::string
。如果您 returned LPCSTR
,这可以避免处理生命周期问题。如果你 returned LPCSTR
你将不得不分配内存并确保你释放它。这正是您不想在 C++ 代码中做的事情。因此,return std::string
并在调用 Windows API 函数时对该对象调用 c_str()
。