-1
std::vector<std::bitset<8>>& vecBin
vecBin 정확히 4 요소가있는 경우, 다음과 같은 상황이 발생합니다, 호출 (버프, MBLOCK_SIZE를) sgetn하는sgetn는 const를 매개 변수를 "덮어 쓰기"
bool BinFinder::containsInFile(const std::vector<std::bitset<8>>& vecBin, uint fails/* = 1*/)
{
if (fails >= vecBin.size()) return true;
file.open(path, std::ifstream::binary);
if ((file.rdstate() & std::ifstream::failbit) != 0)
exit(EXIT_FAILURE);
// Reading blocks of 4 KiB (MBLOCK_SIZE = 4096 Bytes)
//file.read(buff, MBLOCK_SIZE);
bool found {};
uint bytesRead { 1 }, foundAtJ {}, failed {};
while(/*file.good()*/!file.eof() && !found && bytesRead > 0)
{
failed = 0;
// Reading blocks until 4 KiB (MBLOCK_SIZE = 4096 Bytes)
//bytesRead = file.rdbuf()->sgetn(buff, MBLOCK_SIZE);
std::streambuf *sb = file.rdbuf(); //debug
std::cout << "After rdbuf" << std::endl; //debug
for (auto i = 0; i < vecBin.size(); ++i) //debug
std::cout << vecBin.at(i) << std::endl; //debug
bytesRead = sb->sgetn(buff, MBLOCK_SIZE); //debug
std::cout << "After sgetn" << std::endl; //debug
for (auto i = 0; i < vecBin.size(); ++i) //debug
std::cout << vecBin.at(i) << std::endl; //debug
...
후이 호출이를 덮어 같다 이 코드 조각의 출력 마부 vecBin의 내용은 다음과 같습니다
output After rdbuf 01100010 01100011 01110101 10101010 After sgetn 00110011 00001010 01101111 10101010
왜 sgetn는 vecBin의 내용을 수정하는 것입니다!