我认为作为答案给出的 C++ 容器的使用并没有得到优化。开始时没有保留内存,并且结果不会复制到buffer
您提供的代码中。
你仍然可以像这样做得更好:
char suffix[] = "\r\nend\r\n";
int suffix_len = strlen(suffix);
char *buf_end = buffer + size - suffix_len - 1;
char *buf_begin = buffer;
for (int i = 0; i < cnt; i++) {
int nchars = _snprintf(buf_begin, buf_end-buf_begin, "…", …);
if( nchars >= 0 ) {
buf_begin += nchars;
} else {
// You may want to set an overflow flag here.
buf_begin = buf_end;
break;
}
}
// There will always be enough room in the buffer to store the suffix, so
// this will null-terminate even if the above loop overflowed the buffer.
_sprintf(buf_begin, "%s", suffix);
我已将其修改为直接写入buffer
而不是output
. 它利用了_sprintf
家庭返回写入的字符数(如果写入的最大字符数为负数)的事实。对我来说,这是将数据连接到缓冲区的更可取的方式,即使在 C++ 中也是如此。