【发布时间】:2015-04-07 18:28:03
【问题描述】:
我对 C++ 和 Windows API(来自 Java 背景)比较陌生,我只是在玩 Windows API 调用 MessageBox 和其他简单函数,直到我尝试从自定义传递连接字符串函数到MessageBox,我注意到生成的窗口中有一个奇怪的输出。
这是可疑函数:
const char* addFoo(const char* strInput)
{
return ("foo-" + std::string(strInput)).c_str();
}
它只是返回原始输入,并在前面添加foo-。 (我希望我没有做任何令人难以置信的错误)
然后,我在 main 中对 MessageBox 进行两次调用,首先不调用该函数,而是即时进行所有计算,然后调用该函数:
const char* a = "bar";
MessageBox(NULL, ("foo-" + std::string(a)).c_str(), "The Foobar Experiment", MB_OK);
MessageBox(NULL, addFoo(a), "The Foobar Experiment", MB_OK);
这是我通过动态连接字符串得到的结果(案例 1):
调用函数addFoo得到的结果(案例2):
有谁知道为什么我使用 addFoo 函数在生成的窗口上得到这些不可读的字符?提前致谢,很抱歉发了这么长的帖子。
【问题讨论】:
-
UB。当 MessageBox 使用指向 char 数组的指针时,您的 std::string 不再存在(addFoo() 的本地)。
-
coming from a Java background这意味着在编写 C++ 代码时不使用 Java 作为指南。
标签: c++ string winapi visual-c++