【发布时间】: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