所以,我的问题一开始似乎很容易。我有兴趣保存我在程序的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使用。你对此无能为力。
操作系统只是以它所知道的方式向您提供所有路径。