Zum Inhalt springen

Simples C Array Problem


darkman2001

Empfohlene Beiträge

Ich habe hier eine Funktion, die einen char Array übergeben bekommt.

Es handelt sich dabei um den Inhalt einer Datei.

Das Array ist [80][3] (3 Zeilen a 80 Zeichen) lang.

Ich benötige nun eine FOR Schleife die mir jede Zeile einzeln in eine andere Datei schreibt. Ich weiß das ich hier mit Pointern arbeiten muss, bekomme es aber nicht hin.

for (i= 0; i< AnzZeilen; i++) /*für jede gelesene Zeile*/

fprintf (andereDatei, "%s\n", *datei[?]);

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Anordung [80][3] ist unsinnig. Da hast du 80 Felder mit jeweils 3 chars. Es müßte also [3][80] sein. Ggf. solltest du das noch ändern.

Der Zugriff sollte dann einfach sein:

 for (i= 0; i< AnzZeilen; i++) /*für jede gelesene Zeile*/

 fprintf (andereDatei, "%s\n", datei[i]);
Dein Problem ist jetzt halt noch, dass du immer in die gleiche Datei "andereDatei" schreibst. Wenn du aber ein Array von FILE-Pointern hast (z.B. FILE* andereDatei[4] o.ä.), schreibe dann einfach
fprintf(andereDatei[i],...)

Gruß

Benjamin

Link zu diesem Kommentar
Auf anderen Seiten teilen

Tja, das ist anders rum.


char string[3][80] bedeutet:


string[0]  -> char[80];

string[1]  -> char[80];

string[2]  -> char[80]; 

Das heißt, das String (von links her gelesen) ein dreidimensionales Array von Zeigern auf char[80] ist.

Hoffe, das war nicht zu verwirrend. Ansonsten schau mal nach, wie das genau mit Zeigern in C ist.

mfg

Benjamin

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Original geschrieben von kLeiner_HobBes

Das heißt, das String (von links her gelesen) ein dreidimensionales Array von Zeigern auf char[80] ist.

Na das stimmt aber nicht. Das Array enthält nicht einen einzigen Zeiger sondern allokiert 3x80 Bytes Speicherplatz.

Arrays können in C nicht direkt an Funktionen übergeben, d.h. Du musst die Adresse des Arrays (Pointer) übergeben.

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ist schon klar. Aber ich wollt das des Verständnisses wegen nicht zu sehr "verkomplizieren". :)

Wenn du's genau haben willst, enthält string die Adresse eines Speicherbereichs, in dem wiederum drei Adressen angegeben sind, welche ihrerseits jeweils auf einen Speicherbereich von sizeof(char)*80 Größe zeigen ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Original geschrieben von kLeiner_HobBes

Wenn du's genau haben willst, enthält string die Adresse eines Speicherbereichs, in dem wiederum drei Adressen angegeben sind, welche ihrerseits jeweils auf einen Speicherbereich von sizeof(char)*80 Größe zeigen ;)

Nein, das stimmt leider auch nicht.

char string[3][80] reserviert einen 3x80 (=240 Byte) grossen Speicherbereich. Um auf das Element string[X][Y] zuzugreifen wird 3*x+y berechnet und zur Startadresse des Arrays addiert. Innerhalb dieses Speicherbereichs gibt es nur einzelnen Elemente der Größe "char" (also ein Byte), keines der Elemente enthält einen Zeiger! Was Du meinst ist ein Array von Pointern:

char *string[3];

In diesem Fall enthält "string" drei Pointer die auf - noch zu allokierende - Speicherbereiche zeigen, in denen dann die eigentlichen "strings" enthalten sind.

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...