Almacenar String en char*

Muy buenas, estoy tratando de hacer un char* lleno de varios strings basándome en el ejemplo que dan en la página de arduino. string - Arduino Reference. Lo que yo deseo hacer es ingresar varios Strings dentro de un vector para luego utilizarlas por la dirección del vector. Por ejemplo: voy a ingresar una red Wifi y su contraseña, por lo que guardo en la posición 0 del vector el nombre de la red y en la posición 1 la contraseña. He estado tratando de hacerlo por varios métodos pero no lo he logrado así que al final me rendí y coloco mi problema acá haber si alguno me puede ayudar.

El código que estoy implementando es el siguiente:

char *myStrings[] = {"This is string 1", "This is string 2", "This is string 3",
                     "This is string 4", "This is string 5", "This is string 6"
                    };
String dato = "hola";
String dato2 = "hi";
unsigned int len;

void setup() {
  Serial.begin(9600);
}

void loop() {
  len = dato.length()+1;
  char buf[len];
  dato.toCharArray(buf,len);
  myStrings[0] = buf;

  len = dato2.length()+1;
  dato2.toCharArray(buf,len);
  myStrings[1] = buf;

  Serial.println(myStrings[0]);
  Serial.println(myStrings[1]);

  delay(500);
//  for (int i = 0; i < 6; i++) {
//    Serial.println(myStrings[i]);
//    delay(500);
//  }
}

Aquí lo que hago es declarar el char* y 2 variables llamadas dato y dato2 como unos String, luego en el loop realizo la conversión de dicho String a char para poder ingresarlo en el vector myString, primero guardo lo que contiene dato en la posición 0 y luego guardo lo que tiene dato2 en la posición 1. El problema de este código es que al momento de ingresar dato2 en la posición 1, la posición 0 también me queda con el valor que tiene dato2 lo cual no entiendo el porqué. Quizas me estoy complicando mucho y hay alguna forma más sencilla de hacerlo. Si alguno me colabora se lo agradecería.

Saludos.

Si solo requieres ejecutar una vez lo metes todo en el setup().

char* myStrings[] = {"This is string 1","This is string 2","This is string 3","This is string 4", "This is string 5", "This is string 6"};
String dato = "hola";
String dato2 = "hi";
unsigned int len;


void setup() {
   Serial.begin(9600);

   len = dato.length()+1;
   char buf[len];
   dato.toCharArray(buf,len);
   myStrings[0] = buf;

   len = dato2.length()+1;
   char buf2[len];               //Te falto esto
   dato2.toCharArray(buf2,len);
   myStrings[1] = buf2;

   for (int i=0; i<6; i++) {
      Serial.println(myStrings[i]);
   }
}

void loop() {
   //Nada
}

PD: Debes entender la sutil diferencia entre string y String.

Hola muchas gracias por el dato no sabía que había una diferencia entre string y String, la cuestión ahora ¿es estrictamente necesario declarar un buf2 para poder hacer esto? Lo que pasa es que este código lo estaba haciendo de prueba para el código real que estoy implementando y es en donde estoy recibiendo por serial un nombre de red Wifi y la contraseña y esos dos datos debo guardarlos en el char* ya que ambos vienen separados por un ; . Un fragmento del código que estoy haciendo es este:

String SumaPuerto;
char Puerto;
char* Wifi[2];
int i = 0;

void setup() {
  Serial.begin(9600);

}

void loop() {
  while (Serial.available() > 0) {
    Puerto = (char)Serial.read();
    if (Puerto == ';') {
      unsigned int len = SumaPuerto.length()+1;
      char buf[len];
      SumaPuerto.toCharArray(buf, len);
      Wifi[i] = buf;
      SumaPuerto = "";
      i += 1;
      if(i == 2){
        Serial.print("SSID: ");
        Serial.print(Wifi[0]);
        Serial.print(" Password: ");
        Serial.println(Wifi[1]);
        i = 0;
      }
    } else {
      SumaPuerto += Puerto;
    }
  }

}

Un ejemplo de lo que llega por Serial es: NombreDeRed;Contraseña;

No pues, el que quería complicarse con String, string y punteros (char*) eras tu.

Para hacer lo que pides ahora solo concatena el char en el String.

String SSID = "";
String PASS = "";
char Puerto;
byte i = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
   while (Serial.available()) {
      Puerto = Serial.read();
      if (Puerto == ';') {
         i++;
      }else{
         if (i == 0){
            SSID += Puerto;
         }else{
           PASS += Puerto;
         }
      }
      delay(10);
   }
   if (SSID != ""){
      Serial.print("SSID: ");
      Serial.println(SSID);
      Serial.print("PASS: ");
      Serial.println(PASS);
      i = 0;
      SSID = "";
      PASS = "";
   }
}

Ups no lo había visto de esa forma jeje. Me ha servido muy bien. Muchas gracias Kike