C++非null终止char数组输出

cha*_*ged 7 c++ string file-io

我试图将一个非null终止的char数组输出到一个文件.

实际的是,我收到数据包,然后打印他们的字段.

现在,因为这些字段不是空终止的,例如,数据段的大小为512但可能完全占用也可能不完全占用.

当我将这些数据写入文件时,我使用简单的<<重载函数,它不知道有关实际数据的任何事情,只查找数据段的终止.

那么,我怎么能告诉输出函数只写这个特定数量的字节

而不是使用这样的东西,每次调用都很昂贵:

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

}
Run Code Online (Sandbox Code Playgroud)

Tad*_*pec 16

如果要准确输入maxbytes字节,请使用write方法

stream.write(buffer, maxbytes);
Run Code Online (Sandbox Code Playgroud)

如果缓冲区中的字节数较少,您如何知道缓冲区中包含多少字节?如果'\0'标记缓冲区结束,您可以写:

stream.write(buffer, std::find(buffer, buffer+maxbytes, '\0') - buffer);
Run Code Online (Sandbox Code Playgroud)

  • `strnlen`有一个缺点 - 它不符合标准. (2认同)