2016-05-15 7 views
1

Ich habe ein Problem, in dem ich mit einem Array von Char arbeiten muss und es im laufenden Betrieb ändern. Zum Beispiel erhalte ich eine Zeichenkette über Seriell oder was auch immer, und ich brauche dieses Zeichenkettenarray, um dasselbe wie die Zeichenkette zu sein.Arduino arbeitet mit char * unbekannter Größe

Beispiel:

char* pepe = "whatever"; 
String stringReceived = "AnyStringOfUnknownSize"; 

Ich habe versucht:

For(int i=0; i< stringReceived.lenght(); i++){ 
pepe[i] = stringReceived.charAt(0); 
} 

Aber es funktioniert nur, wenn die Zeichenfolge die gleiche Größe wie die char * ist, wenn es nicht es ist unproperly funktioniert (extra Zeichen verlassen oder solche Dinge). Ich habe keine Möglichkeit gefunden, die Länge des Char-Arrays zu ändern. Und es gibt nicht viele Informationen über Char * in Arduino.

Jede Hilfe wird wirklich geschätzt.

+0

Stellen Sie sicher, verwenden Sie betrachten einen Nullabschluss setzen ('\ 0') am Ende. –

+0

Sie waren sehr hilfreich, vielen Dank, bitte schreibe diesen Kommentar als Antwort, damit ich ihn als lösende Antwort auswählen kann. Prost –

Antwort

1

Stellen Sie sicher, dass Sie am Ende einen Nullabschluss ('\ 0') einfügen.

#include <string> 
#include <iostream> 

int main(){ 

    //your initial data 
    char pepe[100]; 
    std::string stringReceived = "AnyStringOfUnknownSize"; 

    //iterate over each character and add it to the char array 
    for (int i = 0; i < stringReceived.length(); ++i){ 
    pepe[i] = stringReceived.at(i); 
    std::cout << i << std::endl; 
    } 

    //add the null terminator at the end 
    pepe[stringReceived.length()] = '\0'; 

    //print the copied string 
    printf("%s\n",pepe); 
} 

Alternativ sollten Sie strcpy

#include <string> 
#include <iostream> 
#include <cstring> 

int main(){ 

    //your initial data 
    char pepe[100]; 
    std::string stringReceived = "AnyStringOfUnknownSize"; 

    //copy the string to the char array 
    std::strcpy(pepe,stringReceived.c_str()); 

    //print the copied string 
    printf("%s\n",pepe); 
} 
+0

Beachten Sie, dass AVR Arduinos [nicht wirklich] (http://www.nongnu.org/avr-libc/user-manual/modules.html) die C++ - Header verfügbar sind. –