如What is the C++ idiom to replace snprintf(3)?所述,如果標頭中的某個四字節字段損壞,我正在解析文件頭並生成錯誤消息。此代碼總結了我想要做的事:如何在構建C++字符串時處理未終止的字符數組?
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_pattern
和CAPTURE_PATTERN
是不是空終止字符數組。這是什麼工作:
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] << "'";
這當然,幾乎是無法形容的可怕。
任何想法?
完美!如果C++很容易,誰需要Ruby? ;) – 2011-05-02 06:02:15