Variablen aus einer Datei ermitteln ?
-
Hallo,
ich komme bei einem Algorithmus nicht weiter. Ich möchte aus einer Textdatei bestimmte Werte auslesen und diese in einem Programm verwenden.
Die Textdatei (datei.txt) sieht so aus:
Name = www.google.de Host = www.google.de Port = 80 -
Jetzt möchte ich diese Variablen Name, Host und Port als char (string) in meinem C Code benutzen können.
Folgden Code habe ich schon:
char Name[10]="datei.txt"; FILE* datei; datei = fopen(Name, "r+"); char c; while((c=fgetc(datei))!=EOF) { printf("%c",c); }
Leider wird hiermit nur der Inhalt ausgegeben und ich kann die Variablen nicht benutzen. Mehr Information habe ich leider noch nicht gefunden.
Kann mir jemand weiterhelfen?
Danke!!
-
(c sollte vom Typ int sein, wenn Du fgetc verwendest.)
Lies die Datei halt zeilenweise ein (fgets), sieh nach ob in der Zeile das Wort 'Name' oder Port oder was steht und kopiere alles nach dem =-Zeichen in deine Variable (zB. char* name = malloc(gross_genug), wobei man sicherstellen sollte daß gross_genug wirklich groß genug ist, weil man sonst häßliche Buffer-Overflows produziert). Du kannst Dir mal die Funktionen strstr, strchr vielleicht auch strtok oder so angucken und ein bißchen mit dem Code rumspielen, das ist bestimmt ganz lehrreich, weil sowas ist in C fast schon ein schwieriges Problem :).
-
aber wie schon gesagt wurde, immer aufpassen dass es wirklich groß genug ist, denn buffer overflows sind schwer aufspürbare fehler!
-
Lars Hupel schrieb:
aber wie schon gesagt wurde, immer aufpassen dass es wirklich groß genug ist, denn buffer overflows sind schwer aufspürbare fehler!
für solche Fälle (weil es sehr lästig ist, sich jedes Mal in jedem Projekt Gedanken darüber zu machen) habe ich eine kleine Bibliothek, die die Speicherreservierung automatisch macht, ich arbeite allerdings an einer neuen Version http://pcpool.mathematik.uni-freiburg.de/~pabloy/projects/sstrings/
die kannst du benutzen oder source code anschauen, ich hab einige Stunden mit valgrind getestet und keinen Abstürtzte gehabt und alles was reserviert wurde, wurde freigegeben.