C fwrite 字符数组

C fwrite char array

这是一个使用一组预定义代码将输入文件 (infp) 编码为输出文件 (outfp) 的函数(在普通文本模式下)

void encode( char *codes[], FILE *infp, FILE *outfp) {
    while (infp) {
        if (feof(infp)) {
            break;
        }
        char buffer[256];
        sprintf(buffer, "%s", codes[fgetc(infp)]);
        printf("%lu, %s\n", strlen(buffer), buffer); //this works
        fwrite(buffer, sizeof(char), strlen(buffer), outfp);
    }
};

codes 是一个 char 数组,大小为 256
例如 codes[65] returns ascii char A
的代码 但是每个ascii字符的代码长度不同,最大值为256

printf 行工作得很好,我得到了类似的东西,例如:

6, 100110
5, 00000
4, 0010
3, 110
5, 01011
4, 0001

所以我预计输出文本文件将是 100110000000010110010110001
但是 fwrite 行我什么也没得到,即输出文本文件是空白的,
直到我将第三个参数放入 256,即

fwrite(buffer, sizeof(char), 256, outfp);

但是输出中有很多空字符和奇怪的字符

请帮忙。提前致谢!

参见 feof() 的定义 [feof() 参考资料][1] [1]: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/feof

"For example, if a file contains 10 bytes and you read 10 bytes from the file, feof will return 0 because, even though the file pointer is at the end of the file, you have not attempted to read beyond the end. Only after you try to read an 11th byte will feof return a nonzero value."

while 不会停止(顺便说一句,这是无用的条件),并且 feof() 不会 return 1 直到为时已晚,您从 fgetc() 得到 -1,然后使用它作为数组中的索引,可能会出现异常,并且程序在关闭输出文件之前崩溃。

if (!infp || !outfp) {
    // Check that files opened successfully
    return;
}

while (true) {
    int index = fgetc(infp);
    if (index < 0) {
        // fgetc() return -1 on end of file
        break;
    }
    char buffer[256];
    sprintf(buffer, "%s", codes[index]);
    printf("%lu, %s\n", strlen(buffer), buffer); //this works
    fwrite(buffer, sizeof(char), strlen(buffer), outfp);
}
...
// Output file must be closed, otherwise it will be empty
fclose(outfp);