putc()写错了数据

use*_*856 0 c char

int writeFile(FILE * handle, char * data, int len)
{
    fseek(handle, 0, SEEK_SET);
    for(int i=0; i <= len; i++)
        putc(data[i], handle);
}
Run Code Online (Sandbox Code Playgroud)

当我调用这个函数时,它工作正常,但如果有一个0x1A字符char * data就会写出无数的0xFF.这是为什么?

Jon*_*ler 6

Hex 0x1A也称为Control-Z.

在Windows上(好吧,DOS发起它),文本文件通过在文件中嵌入control-Z来指示EOF.

如果要编写二进制数据,请确保将输出文件作为二进制文件打开.如果您将其作为文本文件打开,则只输出文本(这意味着非常有限的控制字符;可能只是制表符和换行符,系统负责CRLF < - > LF映射).