【问题标题】:std::ostringstream to LPCSTR?std::ostringstream 到 LPCSTR?
【发布时间】:2015-11-11 06:15:35
【问题描述】:

如何将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

【问题讨论】:

    标签: c++ visual-studio winapi std lpcstr


    【解决方案1】:

    像这样:

    std::string str = oss.str();
    LPCSTR cstr = str.c_str();
    

    请注意,您的cstr 仅在str 的下一次修改之前保持有效。因此,例如,您不能从函数中返回 cstr,因为 str 是一个已离开作用域的局部变量。

    不要从此函数返回LPCSTR,而是返回std::string。如果您返回 LPCSTR,这可以避免处理生命周期问题。如果您返回LPCSTR,您将必须分配内存并确保已释放它。正是您不想在 C++ 代码中做的那种事情。因此,在调用 Windows API 函数的位置返回 std::string 并在该对象上调用 c_str()

    【讨论】:

    • 归还它正是我打算做的,那我该怎么做呢?
    • 不要那样做。它会给你留下各种各样的终生头痛。返回一个std::string 并在需要调用winapi 函数的地方调用c_str()
    • 返回对本地的引用不会有好的结果。不要分发死牛(或一般物品)。
    • @IInspectable 对不起,你说得对。评论和答案已编辑。
    猜你喜欢
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    相关资源
    最近更新 更多