Array (2D) von char mit string unterschiedlicher Länge füllen

Gast #4346221
Lesenswert?

Hallo Welt,

ich stehe mit der ganzen Pointerthematik noch etwas auf Kriegsfuss, 
mache aber langsame Fortschritte. Trotzdem hänge ich.

Folgende Problem
1
char stringUser[10][30]
Dieses Array ist definiert, da im Code befüllt wird (via serielle 
Schnittstelle). Soweit so gut! Nun möchte ich aber in dieses 
10dimensionales Array Defaultwerte (z.B. Hans, Friedrich,Jo,..) 
einfüllen. Offensichtlich sind die Namen unterschiedlich lang, aber 
sollen je in dem 30 Byte großen Array abgelegt werden.

Wie weisse ich nun meine 10 Vornamen in den Array?
Dachte so was in der Art
1
stringUser[0] ="Hans"
2
stringUser[30] ="Friedrich"
3
stringUser[60] ="Jo"
4
...

natürlich geht das so nicht, ich vermute dass ich in Richtung Pointer 
arbeiten muss.
Habe mich an dem Artikel 
https://www.mikrocontroller.net/articles/String-Verarbeitung_in_C 
orientiert, bin aber leider nicht ins Ziel gekommen.
Hoffe auf Eure Hilfe

Tom
#4346266
Lesenswert?

Tom schrieb:

> Dieses Array ist definiert, da im Code befüllt wird (via serielle
> Schnittstelle). Soweit so gut! Nun möchte ich aber in dieses
> 10dimensionales Array Defaultwerte (z.B. Hans, Friedrich,Jo,..)
> einfüllen. Offensichtlich sind die Namen unterschiedlich lang,

Das macht nichts.
STrings sind in C so aufgebaut, dass immer klar ist, wo der String 
aufhört. Selbst dann, wenn der String kürzer ist als die Speicherfläche, 
in der er gespeichert ist.

> Wie weisse ich nun meine 10 Vornamen in den Array?
> Dachte so was in der Art
>
1
> stringUser[0] ="Hans"
2
> stringUser[30] ="Friedrich"
3
> stringUser[60] ="Jo"
4
> ...
5
>
>
> natürlich geht das so nicht, ich vermute dass ich in Richtung Pointer
> arbeiten muss.

Lass uns erst mal nur mit deinem 2D Array arbeiten
1
  strcpy( stringUser[0], "Hans" );
2
  strcpy( stringUser[1], "Friedrich" );
3
  strcpy( stringuser[2], "Jo" );

> Habe mich an dem Artikel
> https://www.mikrocontroller.net/articles/String-Verarbeitung_in_C
> orientiert, bin aber leider nicht ins Ziel gekommen.

Der ist ja eigentlich auch nur die Kurzform. Die Langform inklusive 
zahlreicher Übungsbeispiele sollte sich eigentlich in so ziemlich jedem 
richtigen C Buch finden.
Und so schwer ist das auch wieder nicht. Halte dich an die Maxime: 
arbeiten mit Strings bedeutet praktisch immer die Benutzung der str... 
Funktionen. Mit direkten Zuweisungen oder Vergleichen hast du da 
schlechte Karten.
Am Anfang benötigst du 3 Dinge:

* das Verständnis, dass die Speicherfläche (das Array) immer 
größer/gleich sein muss, als der darin zu speichernde String.
* Jeder String hat immer ein '\0' Byte hinten. Schreibst du selbst im 
Programmtext einen String, dann hängt der Compiler dieses Abschlussbyte 
für dich mit an.
* die 4 Funktionen strcpy(), strcat(), strcmp() und strlen()

Damit kommst du schon sehr weit.

Und PS: sieh dein 2D Array an als ein 1-dimensionales Array von weiteren 
1-dimensionalen Arrays. In letzteren wird jeweils 1 String gespeichert 
und die darüberliegende Zusammenfassung zu einem weiteren Array liefert 
dir dann ein Array von Strings.
Gast #4347618
Lesenswert?

Hallo,

danke für die Hilfe.

Der Vorschlag von Thomas funktioniert soweit, allerdings der "sauberere" 
Weg von Karl Heinz wird in meinem Compiler mit einer Fehlermeldung 
quittiert - vielleicht liegt es an meinem Arduino 1.6.5 Compiler?
1
char stringUser[3][30]; // 
2
strcpy( stringUser[0], "Hans" );
Die Fehlermeldung
1
error: expected constructor, destructor, or type conversion before '(' token
2
expected constructor, destructor, or type conversion before '(' token

Irgend eine Idee?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren