如何将文件末尾附加到字符串

Bro*_*ind 0 ocaml eof

我刚刚遇到了这个“问题”:有没有一种聪明的方法可以在字符串中插入文件结尾(ASCII 0)字符?

我所说的“智能”是指比

let s = "foo" ^ (String.make 1 (Char.chr 0))
let s = "foo\000"
Run Code Online (Sandbox Code Playgroud)

也就是说,这反映了我们添加的是 EOF,而不是“ascii 值为 0 的神秘字符”。


编辑:嗯...确实我在搞乱 eof 作为一个字符。但无论如何,在 C 中你可以有

#include <stdio.h>

int main(void)
{
    char a = getchar();
    if (a = EOF)
        printf("eof");
    else 
        printf("not eof");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

您可以在其中测试 char 是否是 EOF (并且(int) EOF-1,而不是0我想的那样)。同样,您可以将 char 设置为 EOF 等。

我的问题是: ocaml 中是否有可能有类似的东西?

Jef*_*eld 6

正如 @melpomene 所说,没有 EOF 字符,并且 '\000' 实际上只是一个字符。所以据我所知,你的问题没有真正的答案。

您可以为仅由 NUL 字符组成的字符串定义自己的名称(我们过去这么称呼它):

let eof = "\000"
Run Code Online (Sandbox Code Playgroud)

那么你的函数看起来像这样:

let add_eof s = s ^ eof
Run Code Online (Sandbox Code Playgroud)