Forum: PC-Programmierung "String-Array" in C


von Dennis S. (eltio)


Lesenswert?

Hallo zusammen,

vielleicht kann mich mal jemand vom Schlauch schubsen.. bekanntlich kann 
mit dem folgenden Code auf char arrays in C zugegriffen werden:
1
char text[50];
2
strcpy(text, "Hallo Welt i!\n");
3
puts(text);

Ich möchte jetzt aber ein "char-Array-Array" haben.  Also in folgender 
Form
1
puts(text[0]); /* ergibt die Ausgabe "Hallo Welt, zum Ersten!" */
2
puts(text[1]); /* ergibt die Ausgabe "Ciao, Welt.. bis bald!" */

Was ist der richtige Weg? Ein zweidimensionales Array?

Vielen Dank,
Gruß
Dennis

von Rene (Gast)


Lesenswert?

Yep :-)

Oder ein Array mit zwei char Pointern, aber dann musste Du den Speicher 
selbst allozieren.

von Dr. Sommer (Gast)


Lesenswert?

Dennis S. schrieb:
> Was ist der richtige Weg? Ein zweidimensionales Array?
Nein, ein 1-dimensionales Array mit Pointern auf Strings:
1
char* arr[] = {"Hallo Welt", "Ciao Welt"}; puts(arr[0]);

von Dr. Sommer (Gast)


Lesenswert?

Rene schrieb:
> Oder ein Array mit zwei char Pointern, aber dann musste Du den Speicher
> selbst allozieren.
Nein, Nein:
2-Dimensionales Array braucht n* soviel Speicher wie der größte String 
braucht (hässlich, unüblich), und für das 2. siehe meinen 1. Post

von Dennis S. (eltio)


Lesenswert?

Hmm... danke schon mal.. aber mir ist noch nicht ganz klar, wie ich zum 
Beispiel eine Benutzereingabe darin speichern kann..

von Rene (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Rene schrieb:
>> Oder ein Array mit zwei char Pointern, aber dann musste Du den Speicher
>> selbst allozieren.
> Nein, Nein:
> 2-Dimensionales Array braucht n* soviel Speicher wie der größte String
> braucht (hässlich, unüblich), und für das 2. siehe meinen 1. Post

Naja, Dein Weg ist natürlich schöner. Aber in seinem Beispiel will er 
den Text mit strcpy reinschreiben. Dann funzt Dein Beispiel nur noch 
beschränkt, nämlich nur solange der zu kopierende String kleiner gleich 
gross ist, wie der String mit dem das Array initialisiert wurde.

von Dr. Sommer (Gast)


Lesenswert?

Rene schrieb:
> Aber in seinem Beispiel will er den Text mit strcpy reinschreiben.
Ach so war das gedacht... Nagut dann doch ein 2-dimensionales array mit 
Größenabfrage oder so:
1
char arr[numberOfStrings][maxStringSize];
2
char* inputString = ....
3
if(strlen(inputString < maxStringSize)) { // Echt-Kleiner, da das 0-Byte noch reinmuss
4
  strcpy (arr[0], inputString);
5
}

von Karl H. (kbuchegg)


Lesenswert?

Dr. Sommer schrieb:
> Rene schrieb:
>> Oder ein Array mit zwei char Pointern, aber dann musste Du den Speicher
>> selbst allozieren.
> Nein, Nein:
> 2-Dimensionales Array braucht n* soviel Speicher wie der größte String
> braucht (hässlich, unüblich)

das kann man so nicht sagen.
Das hängt u.a. auch von 2 Faktoren ab

* was will er eigentlich wirklich machen
* und nicht zu letzt: wie gut kann er programmiere

Da er danach fragen muss, ist er noch nicht so weit, dass er das mit 
dynamischer Allokierung hinkriegt :-)

von Rene (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Da er danach fragen muss, ist er noch nicht so weit, dass er das mit
> dynamischer Allokierung hinkriegt :-)

Na, genau deshalb war meine erste Antwort: yep! :-)

Weil, ein langes Rückfragen hätte vermutlich die Frage nur wesentlich 
verkompliziert.

von Dennis S. (eltio)


Lesenswert?

> * was will er eigentlich wirklich machen
Einlesen von Zeichenketten aus einer CSV-Datei und speichern in dem 
beschriebenen Szenario.

> * und nicht zu letzt: wie gut kann er programmiere
42, aber ich bin etwas aus der Übung.

> Da er danach fragen muss, ist er noch nicht so weit, dass er das mit
> dynamischer Allokierung hinkriegt :-)
Unlogisch. "Er" liest übrigens mit und beantwortet Fragen die 
weiterhelfen das Problem zu lösen sehr gerne...

Gruß Dennis

von Rene (Gast)


Lesenswert?

Ok, dann anders.

Ein paar Fragen:

- läuft das Programm auf einem PC oder µC (frage zielt auf 
Speicherbedarf ab)?
- verarbeitest Du das CSV Zeile für Zeile oder möchtest Du das ganze 
erst mal einlesen (weil, dann müsste man dynamisch allozieren)?

Grüsse,
R.

von Dennis S. (eltio)


Lesenswert?

Hi nochmal,

das Programm soll (vorerst) auf dem PC implementiert werden. 
Dementsprechend ist ist der Speicherverbrauch erstmal wurscht.

Die Daten müssen zunächst komplett vorliegen bevor ich sie 
weiterverarbeiten kann. Dass ich um die dynamische Allokierung nicht 
rumkomme ist klar, da ich im Vorfeld nicht weiß um wieviele Spalten es 
sich handelt.

Gruß Dennis

von Rene (Gast)


Lesenswert?

Hallo Dennis,

wenn Du das in C programmierst, würde ich eine Linked List nehmen, da Du 
ja die effektive Länge des CSV Files nicht kennst.
Das dürfte in dem Fall das einfachste sein.

Mit C++ würden sich einfachere Möglichkeiten anbieten.

Grüsse,
R.

von Dennis S. (eltio)


Lesenswert?

Rene schrieb:
> Hallo Dennis,
>
> wenn Du das in C programmierst, würde ich eine Linked List nehmen, da Du
> ja die effektive Länge des CSV Files nicht kennst.
> Das dürfte in dem Fall das einfachste sein.
>
> Mit C++ würden sich einfachere Möglichkeiten anbieten.
>
> Grüsse,
> R.

Hi Rene,

vielen Dank. Das werde ich dann wohl machen. Aber ich  wollte mal 
ausloten ob es noch andere Möglichkeiten gibt.

Gruß
Dennis

von Dennis S. (eltio)


Lesenswert?

Läuft mittlerweile übrigens wunderbar... :-)

von Rene (Gast)


Lesenswert?

Sauber :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.