Übergabe eines char Arrays zu einer Funktion
-
Hallo,
Wie kann ich in der vordefinierten Struktur einen char Array in eine Funktion übergeben?typedef unsigned char BYTE; typedef struct { unsigned int Nr; char Author[30]; char Titel[100]; unsigned long ISBN; struct tBuch *next; }tBuch; BYTE line2struct(char*, tBuch*); char zeile[1024]; //Array für Zeilen aus Datei int main(void){ /*Ausschnitt meines Codes*/ fgets(zeile, 1023, datei); line2struct(zeile, struct tBuch*); } BYTE line2struct(char zeile, struct tBuch*) { }
Für das Verständnis: Ich lese eine Datei Zeilenweise ein und möchte einen Zeilenarray dann in die line2struct funktion übergeben (die dann die Zeile in eine Struktur übergibt).
Nur irgendwie verstehe ich nicht das Prinzip dahinter.Würde mich über eure Hilfe sehr freuen!
-
Als Zeiger, so wie du es bei der Deklaration in Zeile 10 machst.
Bei der Definition in Zeile 24 nimmst du nur ein char.Hast du noch keine eigene
strlen
oderstrcpy
Funktion geschrieben?fgets
kannst du die ganze Größe des Buffers übergeben. Das weiß, dass da noch '\0' hin kommt.
-
Eine eigene strcpy Funktion habe ich noch nicht geschrieben.
In meiner Aufgabe ist nur folgendes vorgegeben:
BYTE line2struct(char*, tBuch*);
Ich vestehe nichtsmals was damit gemeint ist
-
Die Funktion bekommt einen Zeiger auf ein char. Meist ist damit ein C-String gemeint.
Und sie bekommt einen Zeiger auf ein struct.Der Name der Funktion (line2struct) lässt vermuten, dass die in dem übergebenen String enthaltenden Daten ind die struct geschrieben werden sollen.
Wie, hängt davon ab, wie die Zeile aufgebaut ist.
sscanf, strcpy oder strncpy, strtoul, strtok und noch andere Funktionen können dir dabei helfen.
-
Ok, also habe ich eine Funktion die auf einen Zeiger auf einen char und ein struct zeigt.
Jetzt lese ich eine ganze Zeile in "char zeile[];" ein und möchte diese nun an die line2struct funktion übergeben.
Was trage ich nun in die main(){ ?? } und in die BYTE line2struct( ?? ) ein?
Wie die Funktion arbeitet habe ich verstanden, nur hänge ich daran fest, dass ich nicht den "Zeilen Char" in die Funktion übergeben kann..
Vielleicht würde ich durch eine korrekte Antwort das Prinzip schneller verstehen..
-
TheGrandCoder schrieb:
Vielleicht würde ich durch eine korrekte Antwort das Prinzip schneller verstehen..
Wa war an den Antworten bisher nicht korrekt?
#include <stdio.h> typedef unsigned char BYTE; struct xx { struct xx *next; } BYTE line2struct(char*, struct xx*); int main(void){ /*Ausschnitt meines Codes*/ char zeile[1024]; //Array für Zeilen aus Datei struct xx Buch = { NULL}; fgets(zeile, 1023, stdin); line2struct(zeile, &Buch); } BYTE line2struct(char *zeile, struct xx *Buch) { printf("line2struct zeile: <%s>\n", zeile); return 0; }
So etwa?
Sonst stell eine konkrete Frage.
-
Jawoll! Es läuft! Du glaubst nicht wie sehr du mir jetzt geholfen hast! Vielen, vielen Dank!
Ich arbeite dann morgen weiter an meinem Code und melde mich notfalls nochmal.
Vielleicht würde ich durch eine korrekte Antwort das Prinzip schneller verstehen..
Wa war an den Antworten bisher nicht korrekt?Nein, so war das nicht gemeint! Den AHA Effekt bekomme ich bei fertigen Lösungen am schnellsten
-
Wie kann ich nun in meinem line2struct Beispielsweise eine errechnete int in die Struktur als Nummer speichern?
BYTE line2struct(char * zeile, struct tBuch *Buch) { iNr = atoi (Nr); //Array in int umwandeln printf("\n%i", iNr); //Aussgabe zur kontrolle -> OK! strcpy(Buch->Nr, "iNr"); //[ERROR] dereferencing pointer to incomplete type }
-
Indem du ein struct Element als int definierst und den ermittelten Wert dort einträgst.
-
Wutz schrieb:
Indem du ein struct Element als int definierst und den ermittelten Wert dort einträgst.
Das habe ich ja hiermit versucht:
strcpy(Buch->Nr, "iNr"); //[ERROR] dereferencing pointer to incomplete type
Meine Struktur sieht so aus:
typedef struct { unsigned int Nr; char Author[30]; char Titel[100]; unsigned long ISBN; struct tBuch *next; }tBuch;
-
strcpy ist für Strings (aka char *), du willst doch einfach nur eine Zuweisung:
Buch->Nr = iNr;
Und die Zeile
iNr = atoi (Nr);
solltest du dir auch noch mal ansehen (Woher kommen die Variablen iNr und Nr? Und der Parameter 'zeile' wird bisher nicht benutzt!).