【发布时间】:2016-04-02 04:21:09
【问题描述】:
通常可以使用^ 在命令行中转义一个字符。但我无法让它工作。
这是一个测试程序,CommandArguments.exe,它打印它得到的参数。
int main(int argc, char *argv[])
{
int i, j;
for (i = 0; i < argc; ++i) {
printf("%d: %s\n", i, argv[i]);
for (j = 0; j < strlen(argv[i]); ++j) {
printf(" ");
printf("%d ", argv[i][j]);
}
printf("\n");
}
}
有问题的程序 LineBreakCommandArguments.exe 如下:
void main(void)
{
system("CommandArguments ^\n"); // ^\n does not really pass a line break...
}
LineBreakCommandArguments.exe 的输出:
>LineBreakCommandArguments.exe
0: CommandArguments
67 111 109 109 97 110 100 65 114 103 117 109 101 110 116 115
如上所示,CommandArguments 只有一个参数。缺少换行符。
所以问题是,我应该如何修改 LineBreakCommandArguments,以便 CommandArguments 将换行符作为参数?
请注意,我仍然想使用system 函数,因为我希望能够使用像dir/cd 这样的shell 命令,而这些命令在使用CreateProcess 时不可用。
更新:
询问的原因是我正在为编程语言 (haxe) 实现一个 API。该 API 允许用户向 shell 传递任意命令。我希望人们不需要在任何参数中使用换行符,但是谁知道...无论如何,由于编程语言的 api 是潜在许多程序的基础,我想要它覆盖尽可能多的情况。如果在参数中支持换行符不可行,我将按原样记录。
【问题讨论】:
-
它应该在没有转义的情况下工作:system("./foo \"arg\narg\""); (添加引号)
-
@Ctx 不,它不起作用,至少在 Windows 上不起作用......
-
Windows 中的换行符由两个字符组成,试试
\r\n。祝你好运。 -
看起来确实是 XY 问题。你到底想在这里实现什么?什么样的程序需要在它的参数中换行呢?
-
如果 Harry 说的是真的,那么你可能不会得到一个强大的解决方案,但是开发你自己的编码是否可以接受?假设使用 ','(逗号)作为转义字符,这样 ',n' 表示换行符,而 ',,' 将是文字逗号。
标签: c windows command-line parameter-passing command-line-arguments