使用ifstream读取文件时,我发现读取后存储的长度变量从正确的值变为不正确的值。
std::ifstream input_stream(this->file_path_, std::ifstream::binary);
if (input_stream) {
input_stream.seekg(0, input_stream.end);
this->length_ = input_stream.tellg();
input_stream.seekg(0, input_stream.beg);
std::cout << this->length_ << std::endl; // correct
input_stream.read((char *) & this->data_, this->length_);
std::cout << this->length_ << std::endl; // wrong
input_stream.close();
}
更新:添加了工作实施
std::ifstream input_stream(this->file_path_, std::ifstream::binary);
if (input_stream) {
input_stream.seekg(0, input_stream.end);
this->length_ = input_stream.tellg();
input_stream.seekg(0, input_stream.beg);
std::shared_ptr<char> buffer((char *)malloc(sizeof(this->length_)), free);
std::cout << this->length_ << std::endl; // correct
input_stream.read(buffer.get(), this->length_);
std::cout << this->length_ << std::endl; // correct
input_stream.close();
}
我能够使用上面的代码得到一些东西,但它仍然不是我需要的东西。我无法使用uint8_t data_成员。我相信这是一个单独的问题。
答案 0 :(得分:1)
这表明未定义的行为。
您正在使用大小小于input_stream.read
的缓冲区调用this->length
确保缓冲区足够大以容纳length
个字符。
你写过缓冲区的末尾,将你的对象转换成垃圾(一个结果是这个调用后length
不正确)