C++:转义std::string的引号在Linux和Windows上的表现不同

C++ : Escaping quotes for std::string behaves differently on Linux vs Windows

本文关键字:Windows std 转义 string C++ Linux      更新时间:2023-10-16

所以,我的问题一开始似乎很容易。我有兴趣保存我在程序的main()中收到的确切cmd行参数,因为我应该使用一些继承的代码,这些代码需要访问它,但在代码内部会被调用。我不想在这里详述。

主要的问题是,如果我传递一个包含空格的路径,该路径需要放在双引号之间。这些双引号被argv[]去掉了,所以我需要把它们加回来。

所以我做了如下的事情:

string buff;
buff.assign("");
for(int i = 0; i < m_argc; i++)
{
buff.append(""");
buff.append(m_argv[i]);
buff.append("" ");            
}

在WINDOWS上,它返回了我所期望的,类似于这样的东西:

"C:...myProg.exe" "-s" "-i" "c:...file with spaces.dat".

这正是我所期望的。

然而,在LINUX上,我得到了这样的东西:

"/.../myProg.exe" "-s" "-i" "/.../file with spaces.dat"

这对我来说是完全出乎意料的,并进一步扰乱了之后的任何处理

感谢您的帮助:)

根据要求编辑一个工作示例:

#include <iostream>
#include <cstdio>
#include <string.h>
#include <stdlib.h>    
int main(int argc, char* argv[], char* envp[])
{
int nRetCode = 0;
std::string buff;
buff.assign("");
for(int i = 0; i < argc; i++)
{
if (i != argc-1)
{
if (i > 0 && (strcmp(argv[i-1],"-i") == 0 || strcmp(argv[i-1],"-o") == 0))
{
buff.append(""");
buff.append(argv[i]);
buff.append("" ");
}
else
{
buff.append(argv[i]);
buff.append(" ");
}
}
else
{
if (i > 0 && (strcmp(argv[i-1],"-i") == 0 || strcmp(argv[i-1],"-o") == 0))
{
buff.append(""");
buff.append(argv[i]);
buff.append(""");
}
else
buff.append(argv[i]);
}
}
std::cout << "contents of buff: n" << buff.c_str() << std::endl;
return nRetCode;
}

我从这个得到了正确的输出:

/.../myProg -s -i "/.../file with spaces"

正如PaulMcKenzie和IgorTandetnik所建议的那样,这就是调试器报告字符串内容的方式。

谢谢大家的帮助

linux操作系统使用/作为目录路径;Windows使用。你对此无能为力。

操作系统只是以它所知道的方式向您提供所有路径。