C++:转义std::string的引号在Linux和Windows上的表现不同
C++ : Escaping quotes for std::string behaves differently on Linux vs Windows
所以,我的问题一开始似乎很容易。我有兴趣保存我在程序的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使用。你对此无能为力。
操作系统只是以它所知道的方式向您提供所有路径。
相关文章:
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- std::strftime 在 Windows 中使用 GMTIME 将时区 UTC 显示为 UTC+1
- std::async from std::async in windows xp
- Windows std::fstream 修改文件后打开()?
- 为什么"std::isdigit"在 Windows 上报告C++"no matching overloaded function"
- std矢量内存分配linux与windows编译器
- 可能的 std::async 实现错误 Windows
- 涉及"std::string"的编译会导致 Windows 错误状态
- std::vector 在 Linux 和 Windows 中给出了不同的结果
- 如何检查包含 utf8 文本的 std::string 在 Windows 中是否以大写字母开头?
- Windows和原生Android之间的std::shared_ptr差异
- std::map 实现在 Linux 和 Windows 之间有所不同
- std::线程在 Windows 窗体中不可用
- std::sleep_for在Windows 10上的不可预测行为
- std::文件系统"root_name"定义在 Windows 上损坏
- C++:转义std::string的引号在Linux和Windows上的表现不同
- 在分配的结构中初始化 std::map 在 Windows 上失败
- 在Windows中等待std::atomic的正确方法<int>?
- Linux vs Windows std::map 赋值构造函数(为什么会有这样的区别?)