putc()写错了数据

时间:2012-01-08 18:26:57

标签: 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);
}

当我调用此函数时,它工作正常,但如果char * data上有一个0x1A字符,它将写入无数0xFF。那是为什么?

2 个答案:

答案 0 :(得分:6)

Hex 0x1A也称为Control-Z。

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

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

答案 1 :(得分:2)

您正在撰写len+1个字符而不是len个字符。

变化:

for(int i=0; i <= len; i++)

为:

for(int i=0; i < len; i++)

(请注意,您在上一个问题的评论中已经提到过此错误 - 请务必仔细阅读所有您的答案和评论。)