im trying to find a substring in a range using the string::find method, the string is in range but its returning npos
code:
std::cout << "find: \"" << find << "\"" << std::endl;
std::cout << "headerEnd: " << this->_headerEnd << std::endl;
size_t startPos = this->_request.find(find.c_str(), 0);
std::cout << "startPos1: " << startPos << std::endl;
startPos = this->_request.find(find.c_str(), 0, this->_headerEnd);
std::cout << "startPos2: " << startPos << std::endl;
output:
find: "Content-Type: "
headerEnd: 641
startPos1: 294
startPos2: 18446744073709551615
from my understanding, the second find should return the same value, as it is searching from 0 to 641 (headerEnd) and the string is located at 294 being only 14 characters long
so why is it returning npos? ive tried changing from c++98 to c++11 and still gives me the same output
You misunderstood the behavior of the second function. Please read the doc(2).
What the function really do is find substring of
sin range [s, s + count) in the object calling the function start frompos. Here is a small example:which outputs
3.str.find("123321", 0, 3)means, find the substring of123321of range [0, 3), which is123instr.In your code, it means search the substring of
find.c_str()of lengththis->_headerEndinthis->_request, which is 641, far more than the real size 14. Which makes your search failed.