我写了一个简单的程序来读取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'字符。
非常感谢您的帮助。
答案 0 :(得分:3)
fread
可以读取任意二进制文件;它返回读取的元素数,这是您应该存储并在缓冲区的所有交易中使用的值。 (阅读fread
上的一些文档,了解它是如何工作的。)
(另一方面,使用fgets
,您将无法找出读取了多少个字符,因为指向[假定为空终止的] C字符串的指针就是您从中获取的全部内容。)
您需要确保所得缓冲区的处理是零安全的。这意味着没有strlen
或类似的东西,它们都设计用于ASCII输入(或多或少)。
答案 1 :(得分:0)
引用cplusplus.com并删除您在链接中找到的管道工程:
// Open the file with the pointer at the end
ifstream file("example.bin", ios::in|ios::binary|ios::ate);
// Get the file size
streampos size = file.tellg();
// Allocate a block
char* memblock = new char [size];
// We were at the end go to the begining
file.seekg 0, ios::beg);
// Read the whole file
file.read(memblock, size);
Etvoilà!