【问题标题】:How do i pass a variable as wchat_t** from a std::wstring in c++如何从 c++ 中的 std::wstring 将变量作为 wchat_t** 传递
【发布时间】:2020-06-16 04:49:17
【问题描述】:

我正在使用 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 时出现访问冲突。

【问题讨论】:

  • 你不能。反正不是直接的。相反,您需要想出一种方法在分隔符处拆分 command_line 字符串(在您的情况下为空格)并创建一个 wchar_t 指针数组,并将其传递给 input_parser 函数。
  • 还要小心你尝试初始化command_line的字符串中的双引号。
  • 我应该转义那些,但我只显示正在传递的字符串,在 Visual Studio 中未转义它们。为什么不能这样做?我继续并转义了双引号。

标签: c++11 std visual-studio-2019 wstring


【解决方案1】:

好的,some programmer dude 是正确的,在我弄清楚如何用空格分割字符串之后,我必须这样做!

这是最终答案:

#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>());

使用向量将使这个过程更容易。我现在可能会改变另一边使用矢量。

感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2014-04-30
    • 2021-07-16
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2021-11-10
    • 2013-09-21
    相关资源
    最近更新 更多