C++: Store read binary file into buffer
buffer, c++, fgets, null-terminated
Solution
I just want to mention that there is a standard way to read from a binary file into a buffer.
Using `<cstdio>`:
char buffer[BUFFERSIZE];
FILE * filp = fopen("filename.bin", "rb");
int bytes_read = fread(buffer, sizeof(char), BUFFERSIZE, filp);
Using `<fstream>`:
std::ifstream fin("filename.bin", ios::in | ios::binary );
fin.read(buffer, BUFFERSIZE);
What you do with the buffer afterwards is all up to you of course.
Edit: Full example using `<cstdio>`
#include <cstdio>
const int BUFFERSIZE = 4096;
int main() {
const char * fname = "filename.bin";
FILE* filp = fopen(fname, "rb" );
if (!filp) { printf("Error: could not open file %s\n", fname); return -1; }
char * buffer = new char[BUFFERSIZE];
while ( (int bytes = fread(buffer, sizeof(char), BUFFERSIZE, filp)) > 0 ) {
// Do something with the bytes, first elements of buffer.
// For example, reversing the data and forget about it afterwards!
for (char *beg = buffer, *end=buffer + bytes; beg < end; beg++, end-- ) {
swap(*beg, *end);
}
}
// Done and close.
fclose(filp);
return 0;
}
Problem
I'm trying to read a binary file and store it in a buffer. The problem is, that in the binary file are multiple null-terminated characters, but they are not at the end, instead they are before other binary text, so if I store the text after the '\0' it just deletes it in the buffer. Example: ``` char * a = "this is a\0 test"; cout << a; ``` This will just output: `this is a` here's my real code: this function reads one character ``` bool CStream::Read (int * _OutChar) { if (!bInitialized) return false; int iReturn = 0; *_OutChar = fgetc (pFile); if (*_OutChar == EOF) return false; return true; } ``` And this is how I use it: ``` char * SendData = new char[4096 + 1]; for (i = 0; i < 4096; i++) { if (Stream.Read (&iChar)) SendData[i] = iChar; else break; } ```