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);
の2番目の引数が文字列の終了インデックスを超えているため、次のようになります。 ドキュメントによる予期しない動作と空の文字列の取得
注意:makeインデックス値が文字列の長さの範囲内にあることを確認してください。予測できない結果。この種のエラーは、開始位置がStringの長さよりも短いが、終了位置が「t」ではない場合、substring()の2番目のインスタンスで特に見つけるのが難しい場合があります。