在OCaml中的字符串中包含空字符/字节的惯用方法

时间:2016-05-03 00:20:15

标签: ocaml

我正在弄乱OCaml Unix模块以查看它是否会拒绝包含某些字节的字符串,这些字节可能在给定系统调用的上下文中产生令人惊讶的效果并抛出异常。例如。 prog Unix.create_process参数中的空字节,或env : string array参数中某个字符串中的换行符。

我尝试了几种方法在我的字符串中包含一个空字节,例如"/bin/ls\0"(这是字符串文字中的非法转义序列)和"/bin/ls" ^ string_of_char '\0'(这是一个非法的序列)字符文字)。最后,我将零转换为字符串,然后创建一个长度为1的字符串,其中包含空字符,然后将其与我的字符串连接。

module U = Unix;;

let string_of_char ch : string = String.make 1 ch

let sketchy_string = "/bin/ls" ^ string_of_char (char_of_int 0)

let _ = U.create_process sketchy_string [|"ls"|] U.stdin U.stdout U.stderr

将空字节添加到ocaml字符串的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

您可以使用通用的“十六进制代码”转义序列来写入空字节(或您想要的任何其他字节):

let null_byte = '\x00';;
let sketchy_string = "/bin/ls\x00";;

有关进一步参考,请参阅Ocaml手册中有关转义序列的部分:http://caml.inria.fr/pub/docs/manual-ocaml/lex.html#escape-sequence