gpt4 book ai didi

c++ - 将 argv 转换回单个字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:09:18 25 4
gpt4 key购买 nike

我正在编写一个包装另一个进程的(Win32 控制台)程序;它采用以下示例中的参数:

runas.exe user notepad foo.txt

即:runas解析user,然后运行notepad,传递剩余参数。

我的问题是 argv 被分解成单独的参数,但是 CreateProcessAsUser 需要单个 lpszCommandLine 参数。

构建此命令行可能并不像将 argv 与空格连接起来那么简单。有什么指点吗?

这只是一个例子。我的第一个参数实际上不是用户名,其中可能有空格。这使得手动解析 GetCommandLine 的结果变得棘手。

同样,argv 的简单串联将不起作用,因为它需要处理原始参数被引用并且其中可能有空格的情况。

最佳答案

手动重新组合它们很困难:

你可以尝试重新组合它们,我认为它会起作用,但一定要遵循 the same command line escaping rules that windows has .这可能不仅仅是您正在寻找的简单解决方案。

此外,如果有任何参数中有空格,那么您可能希望将它们连接到带有引号的字符串中。这是一个奇怪的转义规则的示例:如果您有 --folderpath "c:\test\" 那么最后一个反斜杠必须加倍 --folderpath "c:\test\\".

如果您使用的是 MFC:

您可以从派生的 CWinApp 的 theApp.m_lpCmdLine 中获取您想要的值。请注意,您仍然可以使用 __argc 和 __argv 或 CommandLineToArgvW 以其他方式访问它们。 .

如果您仅使用 Win32(即使没有 GUI):

你可以从WinMain得到它.这可以是您程序的入口点。

请注意,您仍然可以使用 __argc、__argv 或 CommandLineToArgvW 以其他方式访问它们.

如果您必须将基于控制台的应用程序与 main 或 wmain 一起使用:

Win32 API GetCommandLine似乎是要走的路。不过,您仍然需要解析它才能通过 .exe 名称。还要考虑 exe 名称/路径周围的引号。如果开头没有这样的引号,那么就去下一个空格开始。

关于c++ - 将 argv 转换回单个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/975028/

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