2016-03-23 13 views
-4

Ich brauche die serielle Eingabe von der Konsole auf einen String zu erhalten. , wenn der Benutzer „xyz“ in die Konsole und die Eingabetaste drückt, der String „Eingang“ als „xyz“ definiert werden. Von da an werde ich den String interpretieren. Dies ist, was ich derzeit haben:C++ zu lesen seriellen Eingang String

Defintion:

char input[] = {0}; 
char bufferChar[] = {0}; 

Verwendung:

bool canInput = true; 
while(canInput == true) { 
    if(Serial.available() > 0) { 
    char bufferChar2 = Serial.read(); 
    bufferChar[1] = bufferChar2; 
    strcpy(input[1], input[1]); 
    strcat(input[1], bufferChar[1]); 
    Serial.print(input); 
    tft.print(input); 
    } 
} 

Ich bin neu in c, so leid, wenn dieser Code schlecht ist. Dank in advace, Linus

+0

Bitte einen Code hinzufügen. – Harry

+0

@harry hinzugefügt meinen aktuellen Zustand –

+0

Das sieht eher wie C++, nicht C programmieren Sie in C# oder * verwaltet * C++? –

Antwort

0
char bufferChar[] = {0}; 

Dies erklärt ein Array mit einem Element.

bufferChar[1] = bufferChar2; 

Dies versucht, den Wert des zweiten Elements in einem Ein-Element-Array festzulegen. Pufferüberlauf. Undefiniertes Verhalten

strcpy(input[1], input[1]); 

Das macht keinen Sinn. Neben dem fragwürdigen Grund wollen strcpy() etwas auf sich selbst, ist input ein char Array, so input[1] ist ein einzelner char Wert, während strcpy()char * Argumente übernimmt.

Diese Linie must've gemacht Compiler eine Reihe von Warnungen und/oder Fehler speien. Bitte ignorieren Sie keine Diagnosemeldungen von Ihrem Compiler. Das ist der Compiler, der dir sagt, dass du es falsch machst.

strcat(input[1], bufferChar[1]); 

Also, wir versuchen zu strcat() ein weiteres Paar von char s statt char * s. Das wird nicht besser funktionieren, als zu versuchen, dasselbe zu tun.

Selbst wenn Ihr Compiler dies akzeptiert, wird der resultierende Code zum Absturz bringen, in mindestens drei oder vier verschiedenen Möglichkeiten, nach meiner Schätzung.

Sie müssen:

  1. Deklarieren input und charBuffer Arrays, die von ausreichender Größe sind, für das, was Sie mit ihnen zu tun beabsichtigen.

  2. Pass Zeiger, nicht char s, sowohl strcpy() (wenn Sie es brauchen) und strcat().

  3. char * Parameter für beide strcpy() und strcat() Arrays müssen nullterminierte Strings sein. Es liegt in Ihrer Verantwortung, jeden Parameter zu beenden. Es gibt zwar mehrere Möglichkeiten, diese "kostenlos" zu erhalten, aber wenn Sie Zweifel haben, beenden Sie sie explizit mit 0.