gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:14:20 29 4
gpt4 key购买 nike

所以,我的问题似乎很容易开始。我有兴趣保存我在我的程序的 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 和 Igor Tandetnik 所建议的,这就是调试器报告字符串内容的方式。

谢谢大家的帮助

最佳答案

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

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

关于C++:转义 std::string 的引号在 Linux 和 Windows 上的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47140809/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com