Probleme mit chars bzw. Pointern bei fscanf
-
Hi!
Hoffe ihr könnt mir helfen, ich komme mit Pointern in C immer noch nicht so richtig klar...
Ich habe ein Programm, was aus einer Datei eine Pfadangabe liest und daraufhin
die dort angegebene Datei manipuliert...Mein erster Versuch ist zwar unschön, aber funzt:
char Pfad[500]; lst_in_ptr=fopen(lst_in,"r"); //Öffenen Ausgangsdatei fscanf(lst_in_ptr, "%s", &Pfad) //Einlesen 1. String aus Ausgangsdatei printf("Pfadangabe:: %s\n",Pfad); //spuckt den korrekten Pfad aus
aber die Verbesserung will einfach nicht laufen:
char *Pfad; lst_in_ptr=fopen(lst_in,"r"); fscanf(lst_in_ptr, "%s", &Pfad) printf("Pfadangabe:: %s\n",Pfad); //spuckt segmentation violation aus //bzw. fscanf(lst_in_ptr, "%s", Pfad) //führt zu (null)
Könnt ihr mir sagen was ich anders machen muss?
Wenns unverständlich war bitte bescheid sagen dann formulier ich neu!
Wer ganz viel zeit hat kann mir auch gerne schreiben wo genau da die Unterschiede leigen und mich so den Pontern etwas näher bringen.
Wär ich sehr dankbar für aber vorrangig brauch ich nat. eine Lösung führs Problem...Danke im vorab!
Cuthalion
-
Nimm das & Zeichen vor Pfad im fscanf weg, das ist zuviel.
Pfad ist durch die Deklaration als Pointer auf Pfad[0] interpretiet.
-
du solltest auf jeden fall vorher erst Speicher allocieren.
Außerdem würde ich empfehlen mit fgets() auszulesen
-
@Horst: thx, wenns gar nicht geht werd ich so probieren, wuerde mich aber freuen wenns mit fscanf auch ginge
@PAD thx fuer Antwort aber ich versthe erhlich gesagt nur Bahnhof ...
So:fscanf(lst_in_ptr, "%s", Pfad)
habe ich es ja schon ohne & probiert
aber
printf("Pfadangabe:: %s\n",Pfad)
gibt dann nur (null) aus ...
Warum und wieso ist zwar interessant aber zweitranging... ich brauch ne Loesung den der naechste schritt waere die datei die im pfad steht zu oeffnen..
ein_ptr=fopen(Pfad,"r");
Und das geht einfach nicht wenn ich da immer nur (null) zurueckkriege !!!
P.S. Mit meiner 1. variante funzt das uebrigens genau so sehr praechtig!
Hoffe ihr koennt mir helfen
Cuthalion
-
Ich sagte doch du musst vorher Speicher allokieren, außerdem darf der Pfad in der Datei keine Leerzeichen enthalten, weil scanf nur bis zum ersten Leerzeichen ließt.
FILE *lst_in_ptr = NULL; FILE *fp = NULL; char *Pfad = (char*) malloc (128*sizeof(char)); char *lst_in = "test.txt"; lst_in_ptr=fopen(lst_in,"r"); fscanf(lst_in_ptr, "%s", Pfad); printf("Pfadangabe:: %s\n",Pfad); //. //. //. fp = fopen(Pfad, "w"); delete[] Pfad;
-
Wenn du deine erste Version beibehältst und dann noch das & vor Pfad beim scanf() weglässt, passt es doch eh wunderbar.
Mein Tipp ist, dass du dich erstmal genauer damit beschäftigst, was Zeiger eigentlich sind und wie man sie handhabt.
@Horst2
Der Cast bei malloc ist unnötig. Außerdem sollte man Funktionen erst dann aufrufen, wenn man ALLE Variablen des Blocks definiert hat.delete ist übrigens C++, genauso wie das, was ich schon angemeckert hab.
-
@AJ:
Sorry, ich hatte es schon im c++-Kontext hingeschrieben und dann gemerkt das es das ANSI-C Forum ist. hab dann vergessen noch alles umzuändern.
der cast beim malloc() ist zwar unnötig, schadet aber nicht. ich mach ihn gern, weil es für mich übersichtlicher istFILE *lst_in_ptr = NULL; FILE *fp = NULL; char *Pfad = NULL; char *lst_in = "test.txt"; Pfad = (char*) malloc (128*sizeof(char)) lst_in_ptr=fopen(lst_in,"r"); fscanf(lst_in_ptr, "%s", Pfad); printf("Pfadangabe:: %s\n",Pfad); //. //. //. fp = fopen(Pfad, "w"); free (Pfad);