gpt4 book ai didi

c++ - 构建 C++ 字符串时如何处理未终止的字符数组?

转载 作者:行者123 更新时间:2023-11-30 02:08:59 26 4
gpt4 key购买 nike

What is the C++ idiom to replace snprintf(3)? 中所述,我正在解析文件头并在文件头中的某个四字节字段损坏时生成错误消息。这段代码总结了我正在尝试做的事情:

const std::string parseCapturePattern(const int fd) { // fd is the descriptor of the ogg file
const char CAPTURE_PATTERN[4] = {'O', 'g', 'g', 'S'};
char capture_pattern[4];

read(fd, capture_pattern, sizeof(capture_pattern)); // error handling omitted
if (strncmp(capture_pattern, CAPTURE_PATTERN, sizeof(capture_pattern)) != 0) {
std::ostringstream err;
/*** This won't actually work ***/
err_msg << "Invalid capture pattern: '" << capture_pattern << "'; expecting '"
<< CAPTURE_PATTERN << "'";
/*** This won't actually work ***/

return err.str();
}
}

这将不起作用,因为 capture_patternCAPTURE_PATTERN 不是以 NULL 结尾的字符数组。这是什么工作:

    err_msg << "Invalid capture pattern: '" << capture_pattern[0] << capture_pattern[1] 
<< capture_pattern[2] << capture_pattern[3] << "'; expecting '"
<< CAPTURE_PATTERN[0] << CAPTURE_PATTERN[1] << CAPTURE_PATTERN[2]
<< CAPTURE_PATTERN[3] << "'";

当然,这几乎是难以形容的可怕。

有什么想法吗?

最佳答案

std::string(capture_pattern, capture_pattern+4) 将从 capture_pattern 的前 4 个字符构造一个字符串。

关于c++ - 构建 C++ 字符串时如何处理未终止的字符数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5853855/

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