首页 > 解决方案 > 为什么我会从这个字符串到字符转换中获得随机输出?

问题描述

我只是想将字符串转换为 char(更准确地说是 char*),但如果我在 codeBlocks 或我的项目中运行代码,我会无缘无故地得到不同的输出。所以在codeBlocks上,我运行这个:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    std::string stlstring = "abc";
    std::cout << stlstring << std::endl;
    char* writable = new char[stlstring.size() + 1];
    std::copy(stlstring.begin(), stlstring.end(), writable);
    writable[stlstring.size()] = '\n';
    std::cout << writable ;
}

我得到了这个输出:在此处输入图像描述

在我的项目中,我运行相同的行,但在事件处理程序中:

void RePROGUIUser::applyOptions(wxCommandEvent& event) {
    std::string stlstring = "abc";
    std::cout << stlstring << std::endl;
    char* writable = new char[stlstring.size() + 1];
    std::copy(stlstring.begin(), stlstring.end(), writable);
    writable[stlstring.size()] = '\n';
    std::cout << writable;
}

输出 :在此处输入图像描述

所以我必须在我的 GUI 上按下一个按钮才能发生这种情况,但它真的不应该改变任何东西(我对将 wxWidget 标签放在这里持怀疑态度)。

有人知道吗?

标签: c++stringchar

解决方案


您的代码具有未定义的行为,这意味着一切皆有可能。请注意,空终止符'\0'但不是'\n'。所以改变

writable[stlstring.size()] = '\n';

writable[stlstring.size()] = '\0';

推荐阅读