INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Problem mit char array
27.12.2015, 19:12
Beitrag #1
Problem mit char array
Hallo,
kann mir bitte jemand helfen bei einer Frage zu char Array ?
Ich habe in einem Programm ein Problem, dass ich im nachfolgenden Beispiel simuliert habe. Dabei werden 2Teilstringe aus einem Teststring einem char* zugewiesen, nämlich den Variablen charArray[0] und charArray[3]. Am Ende steht aber in beiden Arrays der gleiche Inhalt.

Code:
char *charArray[6];
char testChar[20];
String teststring = "Abcdefghijklm";
String teilstring;

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

  teilstring = teststring.substring(0, 5);
  Serial.print("Teilstring: ");
  Serial.println(teilstring);
  teilstring.toCharArray(testChar, 20);
  Serial.print("testChar: ");
  Serial.println(testChar);
  charArray[0] = testChar;
  Serial.print("charArray[0]: ");
  Serial.println(charArray[0]);
  Serial.println();

  teilstring = teststring.substring(3, 10);
  Serial.print("Teilstring: ");
  Serial.println(teilstring);
  teilstring.toCharArray(testChar, 20);
  Serial.print("testChar: ");
  Serial.println(testChar);
  charArray[3] = testChar;
  Serial.print("charArray[3]: ");
  Serial.println(charArray[3]);

  Serial.println();
  Serial.print("charArray[0]: ");
  Serial.println(charArray[0]);
  Serial.print("charArray[3]: ");
  Serial.println(charArray[3]);

}

void loop() {
}

Das Ergebnis des Programms:

Teilstring: Abcde
testChar: Abcde
charArray[0]: Abcde

Teilstring: defghij
testChar: defghij
charArray[3]: defghij

charArray[0]: defghij
charArray[3]: defghij


Wieso steht nun auch in der Variablen charArray[0] die Zeichenkette "defghij"??
Habe ich einen grundlegenden Gedankenfehler? Über eine Hilfe wäre ich sehr dankbar, da ich jetzt schon einige Stunden damit verbracht habe. Danke!!!
Gruß
Retian
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.12.2015, 12:30
Beitrag #2
RE: Problem mit char array
Hallo Leute,
hat wirklich keiner eine Idee zu meinem Problem?
Es wäre sehr nett, wenn mir jemand dabei helfen könnte. Danke!!
Gruß
Retian
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.12.2015, 13:01
Beitrag #3
RE: Problem mit char array
(28.12.2015 12:30)Retian schrieb:  hat wirklich keiner eine Idee zu meinem Problem?
Es wäre sehr nett, wenn mir jemand dabei helfen könnte. Danke!!

Hallo Retian,
ich komme mit deiner Definition des Arrays nicht klar. Daher habe ich noch keine Info abgeben können.

Aber da du "drängelst" Wink, wird das Array nicht folgendermaßen deklariert?

Code:
char* ArrayName[6] = {Text1, Text2, Text3, usw.};
Die 6 ist der maximale Inhalt (Felder) des Arrays.

Und die Abfrage erfolgt mit:
Code:
Inhalt = ArrayName[0];   // für (Feld1) Text1
Inhalt = ArrayName[1];   // für (Feld2) Text2
Inhalt = ArrayName[2];   // für (Feld3) Text3

Da du aber die Deklaration nicht korrekt durchgeführt hast, kommt es vermutlich zur falschen Anzeige.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.12.2015, 13:11
Beitrag #4
RE: Problem mit char array
Hallo hotsystems,
so wie du das char array definierst, funktioniert es bei mir ja auch.

In meinem Fall ist aber der Unterschied, dass ich die Inhalte der char* arrays bei der Definition des Arrays noch nicht kenne, sondern erst während der Programmausführung aus einem String übernehme (im konkreten Fall die Daten von einer SD). Deshalb habe ich auch hier im Beispiel die Daten als Teilstrings aus einem String verwendet. Nur bisher leider ohne Erfolg, alle char arrays werden mit dem letzten Teilstring überschrieben.
Gruß
Retian
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.12.2015, 13:18
Beitrag #5
RE: Problem mit char array
Ah ok, das verstehe ich jetzt, habe aber leider keine Antwort.
Werde mir das nochmal anschauen.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.12.2015, 15:22 (Dieser Beitrag wurde zuletzt bearbeitet: 28.12.2015 15:22 von Retian.)
Beitrag #6
RE: Problem mit char array
Hallo hotsystems,
danke schon einmal für deine Bemühung.
Ich habe ein neues Beispielprogramm nun mit deinem Vorschlag der "Speicherplatzreservierung" für die einzelnen "Texte" kombiniert, leider ohne Erfolg wie man sieht:

Code:
char* test[6] = {"          ", "          ", "          ", "          ", "          ", "          "};
char testchar[6];
String teststring = "ABCDEFGHIJKLMNOPQERSUVWXYZ";
String teilstring;

void setup() {
  Serial.begin(115200);
  for (int i = 0; i < 6; i++)
  {
    teilstring = teststring.substring(i, i + 4);
    teilstring.toCharArray(testchar, 5);
    test[i] = testchar;
    Serial.print("test["); Serial.print(i); Serial.print("] = ");
    Serial.println(test[i]);
  }
  Serial.println();
  for (int i = 0; i < 6; i++)
  {
    Serial.print("test["); Serial.print(i); Serial.print("] = ");
    Serial.println(test[i]);
  }
}

void loop() {
}

Ausgabe des Programms:

test[0] = ABCD
test[1] = BCDE
test[2] = CDEF
test[3] = DEFG
test[4] = EFGH
test[5] = FGHI

test[0] = FGHI
test[1] = FGHI
test[2] = FGHI
test[3] = FGHI
test[4] = FGHI
test[5] = FGHI

Gruß
Retian
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.12.2015, 16:12 (Dieser Beitrag wurde zuletzt bearbeitet: 28.12.2015 16:14 von hotsystems.)
Beitrag #7
RE: Problem mit char array
Hallo Retian,
ich habe mir das mal angesehen.
Man lernt ja auch davon, bzw. wird man nicht dümmer. WinkWink

Mit dem untenstehenden Code geht es.
Man muss nur eine weitere Variable aufbauen.

Allerdings kann ich nicht sagen, warum es so ist.
Ich habe die Variable (char) sogar zwischen den Blöcken gelöscht.

" memset(testChar, 0, sizeof(testChar));"

Aber auch das hat nicht funktioniert. Mit der zusätzlichen Variablen geht es.
Aktuell keine Idee, wo der tatsächliche Fehler liegt.
Aber so wäre es doch eine Alternative, oder?

Code:
char *charArray[6];
char testChar[20];
char testChar1[20];
String teststring = "Abcdefghijklm";
String teilstring;

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

  teilstring = teststring.substring(0, 5);
  Serial.print("Teilstring: ");
  Serial.println(teilstring);
  teilstring.toCharArray(testChar, 20);
  Serial.print("testChar: ");
  Serial.println(testChar);
  charArray[0] = testChar;
  Serial.print("charArray[0]: ");
  Serial.println(charArray[0]);
  Serial.println();

  teilstring = teststring.substring(3, 10);
  Serial.print("Teilstring: ");
  Serial.println(teilstring);
  teilstring.toCharArray(testChar1, 20);
  Serial.print("testChar: ");
  Serial.println(testChar1);
  charArray[3] = testChar1;
  Serial.print("charArray[3]: ");
  Serial.println(charArray[3]);

  Serial.println();
  Serial.print("charArray[0]: ");
  Serial.println(charArray[0]);
  Serial.print("charArray[3]: ");
  Serial.println(charArray[3]);
}

void loop() {
}

In deinem aktuellen Sketch kannst du ja eine Variable "testchar(i)" einsetzen, sollte dann auch funktionieren.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.12.2015, 17:04
Beitrag #8
RE: Problem mit char array
Hallo hotsystems,
dass es mit einer zusätzlichen Variable funktioniert, ist mir auch schleierhaft, aber auch nicht wirklich für mein eigentliches Programm geeignet, weil ich da zwei char* Arrays mit jeweils über 100 Elemente benötige, also über 200 zusätzliche Variable anlegen müsste (abgesehen von der Arbeit auch Speicherplatzproblem).

(28.12.2015 16:12)hotsystems schrieb:  In deinem aktuellen Sketch kannst du ja eine Variable "testchar(i)" einsetzen, sollte dann auch funktionieren.

Das wäre dann ja wieder ein char* array, die Varialble testchar[20] habe ich ja nur deshalb eingeführt, weil in der Funktion "teilstring.toCharArray(testchar, 20)" die Variable testchar vom Typ "char" sein muss und nicht "char*".


Ich dachte eigentlich, dass das ein ganz triviales Problem ist und habe eher damit gerechnet, dass ich für meine Unwissenheit an den Pranger gestellt werde. Rolleyes Undecided Aber anscheinend ist dem doch nicht so. Komisch finde ich nur, dass dieses Thema hier im Forum noch nie angesprochen wurde. Zumindest habe ich nichts darüber gefunden.

Übrigens, ein in einem C-Forum gefundener Hinweis bei einer ähnlichen Diskussion, die strcpy-Funktion "strcpy(charArray[x], testChar)" zu verwenden (anstelle von "charArray[x] = testChar") hat auch nicht gefruchtet.

Danke dir auf jeden Fall für deine Bemühung, vielleicht fällt dir noch etwas ein. Danke!!
Gruß
Retian
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Array länge oOSpikeOo 4 63 28.03.2017 18:57
Letzter Beitrag: oOSpikeOo
  Char Werte ausgeben Scotch 4 101 28.03.2017 17:41
Letzter Beitrag: Tommy56
Question Problem beim Hochladen auf AtTiny45. Hilfe -.- Jonas Lindenblatt 5 123 24.03.2017 22:58
Letzter Beitrag: Tommy56
  ESP8622 - 01 sendet UDP - Problem WLan Kriskind 37 2.687 14.03.2017 19:49
Letzter Beitrag: Tommy56
  Smart Home Webserver Basic Authentication Problem Osotastic 21 564 20.02.2017 18:00
Letzter Beitrag: Tommy56
  Problem mit Sketch senden an Uno feuerwehr 5 469 31.01.2017 20:41
Letzter Beitrag: Tommy56
  String -> Char *gelöst* Binatone 2 254 31.01.2017 11:08
Letzter Beitrag: Binatone
  Beim Hochladen USB Problem Nils 10 669 29.12.2016 21:05
Letzter Beitrag: renid55
  ascii string to int array konvertieren renid55 3 221 29.12.2016 11:49
Letzter Beitrag: Tommy56
  Ein als "const" deklariertes Array übergeben Retian 5 237 08.11.2016 18:39
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste