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。那是为什么?
答案 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++)
(请注意,您在上一个问题的评论中已经提到过此错误 - 请务必仔细阅读所有您的答案和评论。)