我写了一个简单的程序来读取一个TXT文件。问题是文件包含一些“\0”字符。下面是一个示例:
下面是我找到的解决问题的方法:

FILE *pInput = fopen("Encoded.txt", "rb");

    fseek(pInput, 0, SEEK_END);
    size_t size = ftell(pInput);
    fseek(pInput, 0, SEEK_SET);

    char *buffer = new char[size];

    for (int i = 0; i < size; i++)
        buffer[i] = fgetc(pInput);

我想替换以下代码:
for (int i = 0; i < size; i++)
        buffer[i] = fgetc(pInput);

只需要简单的函数调用。有什么功能可以做这项工作吗?
我试过用fread,fgets,但是他们在第一个'\0'字符处停止阅读。
非常感谢你的帮助。

最佳答案

fread可以读取任意二进制文件;它返回读取的元素数,这是一个值,您应该在处理缓冲区时存储并使用它。(阅读一些关于fread的文档,了解其工作原理。)
(另一方面,使用fgets您将无法找出读取了多少字符,因为指向[以空结尾的]C字符串的指针是您所能得到的全部内容。)
您需要确保对结果缓冲区的处理是零安全的。这意味着不strlen或类似的,它们都是设计用于ASCII输入(或多或少)。

关于c++ - 如何读取包含'\0'字符的文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20937805/

10-11 22:58