如何在C中的命令行参数中传入空字符?

Tom*_*Tom 13 c command-line escaping

我仍然想知道如何传入一个空字符作为命令行参数,也许这样可以将一个字符串作为参数传递到表单中:

"到\ 0BE\0or\0not\0℃至\ 0BE\0"

然后解析它.但是程序会将此字符串视为:

"到\\ \\ 0BE \\ 0or \\ 0not \\ 0℃至\\ 0BE 0"

我该如何解决这个问题?有什么办法吗?

Tho*_*nin 18

你不能.

C程序接收参数为零终止字符串.根据定义,这样的字符串不能包含空字符.

如果要传递空字符,则必须使用某种语法对其进行某种程度的编码,然后您的C程序必须通过解释该语法对其进行解码.

  • 您也可以从stdin读取它,就像`xargs -0`那样. (3认同)
  • 当我在Ubuntu上的Bash中执行`./prog $(python -c"print'aa\x00bb'")`时,C程序将参数变为`aabb`,这意味着不是在空字节处终止字符串,而是忽略了它.这对你有意义吗? (2认同)

Chr*_*ung 6

C字符串以空值终止,因此在C. :-P中无法传递包含NUL字符的字符串

现在,如果你只是想要一种方法将\0(在用户输入中,即"\\0"作为C字符串)转换为实际的NUL字符,那就另当别论了.在这种情况下,您的程序只需要一个解析器来\0作为分隔符.

  • @Chinmay:通常的程序执行系统调用,至少在 Unix(`execve` 及其兄弟)和 Windows(`CreateProcess`)中,都会在 NUL 处修剪字符串。所以,这是在操作系统级别,而不仅仅是库。:-) (2认同)