¿Cómo usar String.substring?

Tengo el siguiente código en el que requestLine siempre está vacío y no puedo entender por qué. request contiene una solicitud HTTP sin procesar, y quiero obtener la primera línea de la solicitud que contiene el método y la 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; } 

El primer println devuelve 26 como cabría esperar para la cadena "GET /ilyen_nincs HTTP/1.1" (25 caracteres de longitud), pero luego requestLine siempre está vacío. Me pregunto por qué?

Responder

GET /ilyen_nincs HTTP/1.1\n tiene 26 caracteres, por lo que los índices de cadena van de 0 a 25. Dado que su segundo argumento en substring(0, firstEOLAt); excede el índice final de la cadena, se está encontrando comportamiento inesperado según la documentación y obteniendo una cadena vacía.

Precaución: haga asegúrese de que los valores de su índice estén dentro de la longitud de la cadena o obtendrá resultados impredecibles. Este tipo de error puede ser particularmente difícil de encontrar con la segunda instancia de subcadena () si la posición inicial es menor que la longitud de la cadena, pero la posición final no es «t».

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *