darkman2001 Geschrieben 26. März 2004 Geschrieben 26. März 2004 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[?]); Zitieren
kLeiner_HobBes Geschrieben 26. März 2004 Geschrieben 26. März 2004 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 einfachfprintf(andereDatei[i],...) Gruß Benjamin Zitieren
darkman2001 Geschrieben 26. März 2004 Autor Geschrieben 26. März 2004 wäre das nicht so: [a] a: 80 Zeichen also, waagerecht b: 3 Zeilen, also Senkrecht. (wenn man sich das jetzt als Text vorstellt) baaaaaa... baaaaaa... baaaaaa... baaaaaa... Ist es also anders herum? hab ich das richtig verstanden? Zitieren
kLeiner_HobBes Geschrieben 26. März 2004 Geschrieben 26. März 2004 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 Zitieren
nic_power Geschrieben 26. März 2004 Geschrieben 26. März 2004 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 Zitieren
kLeiner_HobBes Geschrieben 26. März 2004 Geschrieben 26. März 2004 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 Zitieren
darkman2001 Geschrieben 26. März 2004 Autor Geschrieben 26. März 2004 Hey es war richtig, und dank ein bisschen nachlesen hab ich es jetzt auch verstanden. Übrigens es ist immer die gleiche Datei, auf die geschrieben wird. Danke! Zitieren
nic_power Geschrieben 26. März 2004 Geschrieben 26. März 2004 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 Zitieren
kLeiner_HobBes Geschrieben 26. März 2004 Geschrieben 26. März 2004 OK stimmt, du hast recht. Ich hab irgendwie von char* string[3] auf das andere impliziert *schäm*. Kommt davon, wenn man schon lange nicht mehr mit statischen Arrays gearbeitet hat *grins. Zitieren
Empfohlene Beiträge
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.