Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ WinAPI CreateProcess和引用参数_C++_C_Winapi - Fatal编程技术网

C++ WinAPI CreateProcess和引用参数

C++ WinAPI CreateProcess和引用参数,c++,c,winapi,C++,C,Winapi,CreateProcess有3个字符串参数:lpApplicationName,lpCommandLine,lpCurrentDirectory 我试着引用args,发现有时候引用会破坏我的代码。 有人能解释一下引用的规则吗 工作正常: NULL "\"C:\\some path\\my app.exe\" myparam1 myparam2" "C:\\some path" "C:\\some path\\my app.exe" "\"C:\\some path\\my app.exe\"

CreateProcess
有3个字符串参数:
lpApplicationName
lpCommandLine
lpCurrentDirectory

我试着引用args,发现有时候引用会破坏我的代码。 有人能解释一下引用的规则吗

工作正常:

NULL
"\"C:\\some path\\my app.exe\" myparam1 myparam2"
"C:\\some path"
"C:\\some path\\my app.exe"
"\"C:\\some path\\my app.exe\" myparam1 myparam2"
"C:\\some path"
不起作用:

NULL
"\"C:\\some path\\my app.exe\" myparam1 myparam2"
"\"C:\\some path\""
"\"C:\\some path\\my app.exe\""
"\"C:\\some path\\my app.exe\" myparam1 myparam2"
"C:\\some path"
工作正常:

NULL
"\"C:\\some path\\my app.exe\" myparam1 myparam2"
"C:\\some path"
"C:\\some path\\my app.exe"
"\"C:\\some path\\my app.exe\" myparam1 myparam2"
"C:\\some path"
不起作用:

NULL
"\"C:\\some path\\my app.exe\" myparam1 myparam2"
"\"C:\\some path\""
"\"C:\\some path\\my app.exe\""
"\"C:\\some path\\my app.exe\" myparam1 myparam2"
"C:\\some path"

抱歉,StackOverflow的格式在上面的例子中没有显示我的反斜杠,我错过了它。。。现在已经修复了

首先,正如andlabs所强调的,在C中,任何反斜杠都必须用反斜杠转义。
表示MS用于解释命令行参数的规则有些复杂和棘手。
此处对此进行了解释:。

我甚至没有尝试添加额外的单词…

引号只属于
lpCommandLine
参数。
lpApplicationName
lpCurrentDirectory
都指定了文件名,因此不能包含嵌入的引号。

请记住,C字符串中的所有反斜杠都必须转义;所有C字符串都需要使用两个反斜杠作为路径分隔符。引用参数的规则在
CommandLineToArgvW()
函数的文档中以及在Old New Thing blog的各个地方都有描述。不应引用应用程序路径和当前目录。引用用于命令行,而不是路径和目录。@RaymondChen但如果您查看CreateProcess的文档,您将看到必须引用lpApplicationName。损坏的文档?我在CreateProcess的文档中没有看到任何地方说必须引用lpApplicationName。它表示,如果lpApplicationName为NULL,则使用lpCommandLine中的第一个标记,并且您需要引用lpCommandLine。@RaymondChen抱歉。你是对的。我看错了文件。似乎“应用程序路径和当前目录不应该被引用”是我问题的答案)谢谢你的提示。但命令行的引用效果很好。什么不起作用-引用lpApplicationName和LPCurrentDirectory在这种情况下,C字符串转义的一般规则是有效的。因为其他参数的转义仍然不清楚。您编写的字符串是用C编写的字符串还是它们的翻译?类似于
“\”C:\\some path\\my app.exe“myparam1 myparam2”
的内容应触发编译器错误。