Как передать переменную как wchat_t ** из std :: wstring в c ++ - PullRequest
0 голосов
/ 03 марта 2020

Я использую VS 2019, и стандарт языка C ++ установлен в значение по умолчанию, которое я предполагаю, что это C ++ 11?

У меня есть следующий конструктор класса в заголовочном файле:

input_parser(int& argc, wchar_t** argv)
{
    for (auto i = 0; i < argc; ++i)
    {
        this->tokens_.emplace_back(argv[i]);
    }
};

Для вызова метода argv параметр Я создаю массив wchar_t следующим образом:

std::wstring command_line = L"-m \"F-14RHV\" -s \"BIT|Flir\" -d";
auto buffer = new wchar_t[command_line.length() + 1];
wcsncpy_s(buffer, command_line.length()+1, command_line.c_str(), command_line.length() + 1);
const auto inputs = input_parser(argc, &buffer);
delete[] buffer;

Внутри конструктора первый проход, когда argc == 0 в порядке, но я получаю нарушение доступа, когда argc == 1.

1 Ответ

0 голосов
/ 03 марта 2020

Хорошо, так что какой-то программист чувак был прав, и вот как я должен это сделать после того, как я выясню, как разбить строку на пробелы!

Вот окончательный ответ:

#include <string>
#include <sstream>
#include <algorithm>
#include <iostream>
#include <iterator>

std::wstring text = L"-m \"F-14RHV\" -s \"BIT|Flir\" -d";
std::wistringstream iss(text);
std::vector<std::wstring> results((std::istream_iterator<std::wstring, wchar_t>(iss)),
std::istream_iterator<std::wstring, wchar_t>());

Использование вектора значительно облегчит этот процесс. Я, вероятно, сейчас поменяю другую сторону, чтобы использовать вектор.

Спасибо за помощь.

...