Como usar String.substring?

Tenho o seguinte código em que requestLine está sempre vazio e não consigo descobrir o porquê. request contém uma solicitação HTTP bruta e desejo obter a primeira linha da solicitação que contém o método e o 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; } 

O primeiro println retorna 26 como você esperaria para a string "GET /ilyen_nincs HTTP/1.1" (25 caracteres), mas depois requestLine está sempre vazio. Eu me pergunto por quê?

Resposta

GET /ilyen_nincs HTTP/1.1\n tem 26 caracteres, então os índices da string vão de 0 a 25. Como seu segundo argumento em substring(0, firstEOLAt); excede o índice final da string, comportamento inesperado de acordo com a documentação e obtendo uma string vazia.

Cuidado: make certifique-se de que seus valores de índice estão dentro do comprimento da String ou você obterá resultados imprevisíveis. Esse tipo de erro pode ser particularmente difícil de encontrar com a segunda instância de substring () se a posição inicial for menor que o comprimento da String, mas a posição final não for “t.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *