什么是替换snprintf(3)的C++习语?

Jos*_*ver 4 c++

我有一些C++代码需要在解析某个文件头失败时生成错误消息.在这种情况下,我需要确保标头中的某个4字节字段是"OggS",如果不是,则返回错误消息,例如"invalid capture_pattern:'FooB';期望'OggS'".我的代码看起来像这样:

const string OggPage::parseHeader(void) {
  read(fd, capture_pattern, sizeof(capture_pattern)); // error handling omitted
  if (strncmp(capture_pattern, CAPTURE_PATTERN, sizeof(capture_pattern)) != 0) {
    char err[256];
    snprintf(err, sizeof(err), "Failed to read %d bytes from file descriptor %d: %s\n", sizeof(capture_pattern), fd, err);
    return err;
  }

  return "Everything was A-OK!";
}
Run Code Online (Sandbox Code Playgroud)

从其他数据类型构建字符串的标准C++习惯用法是什么?我不是printf(3)在这里坚持这种风格的格式,所以请随意提出任何可行的方法.

bed*_*uin 5

您可以使用stringstreamostringstream来自C++标准库.如果不使用进一步的流来从中读取值(例如,它的istream部分将不被使用)ostringstream更合适.

#include <sstream>
#include <string>
#include <iostream>

int main() {
 std::stringstream str_stream;
 int number = 5;

 str_stream << " String with number " << number << std::endl;;

 std::string str = str_stream.str();
 std::cout << str; 
}
Run Code Online (Sandbox Code Playgroud)