C++ non null terminated char array outputting

c++, file-io, string

Solution

If you want to put exactly `maxbytes` bytes, use `write` method

stream.write(buffer, maxbytes);

If you can have less bytes in buffer, how do you know how many of them your buffer contains? If `'\0'` marks buffer end, you can write:

stream.write(buffer, std::find(buffer, buffer+maxbytes, '\0') - buffer);

Problem

I was trying to output a not null terminated char array to a file. Actual thing is, I am receiving packets and then printing their fields. Now as these fields are not null terminated, for example, a data segment which has size of 512 but may or may not be completely occupied. When I write this data to a file I am using simple << overloaded function which does not know any thing about actual data and only looks for termination of data segment. So, how can I tell the output function to write only this much specific number of bytes? Instead of using something like this which is expensive to call each time: ``` enter code here bytescopied = strncpy(dest, src, maxbytes); if (bytescopied < 0) { // indicates no bytes copied, parameter error throw(fit); // error handler stuff here } else if (bytescopied == maxbytes) { dest[maxbytes-1] = '\0'; // force null terminator } ```

Original source