特殊字符读错了 - 文件I / 0

时间:2013-04-03 06:47:13

标签: c linux gcc file-io special-characters

此代码读取每个字节的文件字节以便复制它:

 fplain = fopen("plaintext", "rb");
 fcypher = fopen("cyphertext", "wb");

 for(j = 0; j < Nb; j++){
    for(i = 0; i < 4; i++){
            if(feof(fplain))
                break;              
            fread(&in[i][j], sizeof(unsigned char), sizeof(unsigned char), fplain); 
            fwrite(&in[i][j], sizeof(unsigned char), sizeof(unsigned char), fcypher);
    }
 }

问题是输入文件包含无法正确读取的特殊字符:

2Cö¨Z011¢à74

似乎之前检测到文件末尾,输出文件中的结果为:

2Cö¨Z011

我在fopen()函数中使用“rb”模式。

1 个答案:

答案 0 :(得分:0)

以十六进制编码的字节占用两个字节。要生成16个字符,您必须从文件中读取32个字节;如果您读取16个字节,则只能生成8个字符。

另一方面,如果通过“16个十六进制编码的字符”表示该文件只包含16个字节,则不能指望读取12个字符(24个字节)。在这种情况下,预期输出中的最后4个字符可能是由错误程序产生的随机垃圾,并且无法可靠地重现它们。