Почему я получаю случайные выходные данные из этой строки в преобразование символов? - PullRequest
1 голос
/ 05 июля 2019

Я просто пытаюсь выполнить преобразование строки в 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 ;
}

Я получил такой вывод: enter image description here

И в моем проекте я запускаю те же строки, но вобработчик события:

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;
}

Вывод: enter image description here

Так что я должен нажать кнопку на моем графическом интерфейсе, чтобы это произошло, но это действительно не должно изменитьсячто-нибудь (и я скептически относился к тегу wxWidget здесь).

Есть идеи у кого-нибудь?

1 Ответ

6 голосов
/ 05 июля 2019

Ваш код имеет неопределенное поведение , означает, что все возможно. Обратите внимание, что нулевой терминатор равен '\0', но не '\n'. Так что поменяй

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

до

writable[stlstring.size()] = '\0';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...