String.substring을 사용하는 방법?

requestLine가 항상 비어있는 다음 코드가 있는데 그 이유를 알 수 없습니다. request에는 원시 HTTP 요청이 포함되어 있으며 메서드와 URL이 포함 된 요청의 첫 번째 줄을 가져오고 싶습니다.

boolean parseRequest(String* request) { int firstEOLAt = request->indexOf("\n"); if (firstEOLAt < 0) return false; Serial.println(firstEOLAt); String requestLine = request->substring(0, firstEOLAt); Serial.println(requestLine); // ...rest of the parsing will go here... return true; } 

첫 번째 println는 문자열 "GET /ilyen_nincs HTTP/1.1" (25 자 길이)에 대해 예상 한대로 26을 반환 한 다음 requestLine는 항상 비어 있습니다. 이유가 궁금합니다.

답변

GET /ilyen_nincs HTTP/1.1\n는 길이가 26 자이므로 문자열 색인은 0에서 25까지입니다. substring(0, firstEOLAt);의 두 번째 인수가 문자열의 끝 색인을 초과하므로 문서 에 따라 예상치 못한 동작과 빈 문자열을 가져옵니다.

주의 : make 인덱스 값이 문자열 길이 내에 있는지 확인하십시오. 그렇지 않으면 예측할 수없는 결과. 이러한 종류의 오류는 시작 위치가 문자열의 길이보다 작지만 끝 위치가 “t”인 경우 substring ()의 두 번째 인스턴스에서 찾기가 특히 어려울 수 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다