NULL 字符更改输出文件

NULL character changing output file

我有一个功能:

int csv_fwrite2 (FILE *fp, const void *src, size_t src_size, unsigned char quote){
    const unsigned char *csrc = src;

    if (fp == NULL || src == NULL)
        return 0;

    if (fputc(quote, fp) == EOF)
        return EOF;

    while (src_size) {
        if (*csrc == quote) {
            if (fputc(quote, fp) == EOF)
                return EOF;
        }
        if (fputc(*csrc, fp) == EOF)
            return EOF;
        src_size--;
        csrc++;
    }

    if (fputc(quote, fp) == EOF) {
        return EOF;
    }

    return 0;
}

基本上,它获取 src 中的内容并将 src 的内容输出到一个文件(csv 格式)中,引号字符将是您传递给它的任何参数。

例如。

src = ["name", "age", "gender"]; csv_fwrite2 (fp, src, src_size, '"');

在输出文件中,它将包含: "name","age","gender"

如果:

src = ["name", "age", "gender"]; csv_fwrite2 (fp, src, src_size, '|');

那么输出是:

|name|,|age|,|gender|

一切正常,但是,当我输入 NULL 字符作为引号时:

csv_fwrite2 (fp, src, src_size, '[=15=]'); `

不是将 src 的内容作为字符串写入文件,而是输出类似于:

006e 616d 6500 2c00 6167 6500 2c00 6765

而不是:name,age,gender

有什么想法吗?

我认为这是您期望的文件,但它是作为十六进制转储而不是文本在您的编辑器中加载的,因为 '[=10=]' 是一个特殊字符。