es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Arduino C++, no se puede convertir String a char*

Estoy tratando de hacer un teclado macro bluetooth, con asignaciones de teclas. Casi todo funciona excepto la conversión de secuencia de macro de String a char*.

Esto es necesario porque si se pasa el String al comando bleKeyboard.print(), imprimirá “\r\n” literalmente en lugar de nueva línea.

Entonces lo que quiero hacer es:
1) Leer la línea del archivo de texto en la tarjeta SD y colocarla en “parámetro” – esto funciona y es un String.
2) Convertir el contenido de “parámetro” a “chararray”.
3) Asignar “chararray” al siguiente elemento del array macro_keys[15] y repetir los pasos 1-3 para todas las teclas.

Este código simplificado debería funcionar, pero chararray está en blanco:

String parameter;
char* macro_keys[15];
char* chararray;

Serial.begin(115200);

parameter = "default1";
//int str_len = sizeof(parameter);
int str_len = parameter.length(); // Gracias David Schwartz
str_len++;
parameter.toCharArray(chararray, str_len);
Serial.print("parameter: ");Serial.println(parameter);
Serial.print("str_len: ");Serial.println(str_len);
Serial.print("chararray: ");Serial.println(chararray);

Puedes verificar este esbozo o los cambios sugeridos pre-cargados en el simulador de código ESP32 en wokwi.com.

¿Qué está mal aquí?

Para aclararlo más, más información sobre lo que estoy tratando de construir:

https://github.com/ekoslav/ESP32MacroKeyboard

Imagen de referencia:
Imagen

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema es que la variable chararray no tiene asignada ninguna memoria antes de intentar copiar el contenido del parámetro String en ella utilizando el método toCharArray(). Para solucionar esto, puedes asignar memoria para la variable chararray utilizando la función malloc():

    String parameter;
    char* macro_keys[15];
    char* chararray;
    
    Serial.begin(115200);
    
    parameter = "default1";
    int str_len = parameter.length() + 1;
    chararray = (char*) malloc(str_len);
    parameter.toCharArray(chararray, str_len);
    
    Serial.print("parameter: "); Serial.println(parameter);
    Serial.print("str_len: "); Serial.println(str_len);
    Serial.print("chararray: "); Serial.println(chararray);
    

    Asegúrate de liberar la memoria asignada utilizando la función free() cuando ya no la necesites:

    free(chararray);
    

Comments are closed.