gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:21 24 4
gpt4 key购买 nike

我有一些 C++ 代码需要在解析某个文件头失败时生成错误消息。在这种情况下,我需要确保 header 中的某个 4 字节字段是“OggS”,如果不是,则返回错误消息,如“invalid capture_pattern: 'FooB'; expecting '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!";
}

从其他数据类型构建字符串的标准 C++ 习惯用法是什么?我不拘泥于 printf(3) 风格的格式,所以请随意提出任何可行的建议。

最佳答案

您可以使用 C++ 标准库中的 stringstreamostringstream。如果进一步的流将不用于从中读取值(例如,它的 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;
}

关于c++ - 替换 snprintf(3) 的 C++ 习语是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5847480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com