tochararray length examples example c_str arrays string arduino

arrays - length - ¿Tiene Arduino el método.toCharArray() tiene un error?



tochararray example (1)

toCharArray copiará tantos caracteres en el búfer como sea posible mientras devuelve una cadena C válida . Una cadena C válida tiene un byte de terminación nul (00). Si le das un búfer de 2 bytes, puede caber solo un carácter antes del terminador nul.

(Mire la fuente de Arduino donde calcula cuántos caracteres copiar. Https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/cores/arduino/WString.cpp#L544 The bufsize - 1 es donde está dejando espacio para un terminador nulo.)

Tu código debe ser char myarray[3]; // Make room for 2 chars + nul terminator line.toCharArray(myarray, sizeof(myarray)); // Use sizeof to avoid repeating ''2'' char myarray[3]; // Make room for 2 chars + nul terminator line.toCharArray(myarray, sizeof(myarray)); // Use sizeof to avoid repeating ''2''

Pero realmente, no necesitas un buffer para copiar en absoluto. String ya tiene un acceso de caracteres, charAt() Serial.print(line.charAt(0), HEX); Serial.print(line.charAt(1), HEX); Serial.print(line.charAt(0), HEX); Serial.print(line.charAt(1), HEX);

Supongamos que tengo una cadena "AB", que quiero convertir a una matriz char [] e imprimo los dos elementos de matriz char en HEX en el monitor serie. Debería ser bastante simple. Sin embargo, el segundo elemento siempre se imprime como 0.

String line = "AB"; Serial.println(); Serial.print(line); Serial.println(); char myarray[2]; line.toCharArray(myarray,2); Serial.print(myarray[0],HEX); Serial.print('' ''); Serial.print(myarray[1],HEX); Serial.print('' '');

La salida que obtengo es

AB 41 0