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
  Ein als "const" deklariertes Array übergeben Retian 5 124 08.11.2016 18:39
Letzter Beitrag: Tommy56
  Problem mit SD Card Library BennIY 4 186 06.10.2016 18:38
Letzter Beitrag: Bitklopfer
  Problem mit SD.remove Eichner 6 210 22.08.2016 19:42
Letzter Beitrag: Eichner
  4x16 Tastermatrix Problem Michel 16 842 14.07.2016 10:02
Letzter Beitrag: StephanBuerger
  String-Array füllen? torsten_156 9 440 08.07.2016 20:07
Letzter Beitrag: amithlon
  Problem mit Delay und Millis funnyzocker 1 454 26.06.2016 09:54
Letzter Beitrag: hotsystems
  Problem mit ESP8266 und EMail senden torsten_156 1 595 13.06.2016 21:14
Letzter Beitrag: torsten_156
  Messwerte in Array speichern ArduinoMega2560 2 414 07.06.2016 16:30
Letzter Beitrag: SkobyMobil
  ESP8266_01 flashen - Problem torsten_156 12 1.041 30.05.2016 20:12
Letzter Beitrag: torsten_156
  Hardwareserial/Softserial: Problem mit Superklasse tuxedo0801 10 476 19.05.2016 12:25
Letzter Beitrag: amithlon

Gehe zu:


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