Bitte um Hilfe!!!
-
@Swordfish sagte in Bitte um Hilfe!!!:
@RBS2 Hm. Dick. Ja, das Aufräumen im Fehlerfall könnt' man mit
goto
auch schöner machen. Dann wärs nicht so dick.Ich sehe mit Freuden, dass du bald den Pfad der Erleuchtung finden wirst. Jedenfalls entwickelst du das Gespür dafür.
http://people.cs.pitt.edu/~zhangyt/teaching/cs1621/goto.slides.pdf
-
@RBS2 Ich bin weder eine Kerze noch dick und
goto
ist toll.ich habe aber schon davon gehört, daß sich so manche auch mal eine geile Kerze ... ach, lassen wir das
-
das aufräumen im fehlerfall kann man auch weglassen, wenn man das programm sowieso beendet (ganz böse
), oder man erstellt sich halt eine funktion, die das macht, und schon hat niemand mehr was zu meckern.
-
@Wade1234 sagte in Bitte um Hilfe!!!:
das aufräumen im fehlerfall kann man auch weglassen, wenn man das programm sowieso beendet (ganz böse
), oder man erstellt sich halt eine funktion, die das macht, und schon hat niemand mehr was zu meckern.
das kann man auch weglassen, wenn man auf malloc/realloc verzichtet, also einen statischen buffer verwendet. wer einzelne wörter einliest, darf getrost eine maximallänge voraussetzen.
-
@RBS2 sagte in Bitte um Hilfe!!!:
das kann man auch weglassen, wenn man auf malloc/realloc verzichtet, also einen statischen buffer verwendet.
@Wade1234 spielt wohl eher darauf an, daß das OS sowieso klar Schiff macht.
@RBS2 sagte in Bitte um Hilfe!!!:
wer einzelne wörter einliest, darf getrost eine maximallänge voraussetzen.
Das sind die berühmten letzten Worte vor einem Buffer-overflow. Vor allem weiß ich ja im vorliegenden Fall ganz genau, wieviel ich maximal lesen will. Wörter länger als
needle
interessieren sowieso nicht.
-
@Swordfish sagte in Bitte um Hilfe!!!:
Das sind die berühmten letzten Worte vor einem Buffer-overflow.
Nimmste fgets(). Da flowed nix over.
-
@RBS2 Mhm. Und dabei zerstückelst mit gut glück das gesuchte wort. Komm. Troll dich.
-
@Swordfish sagte in Bitte um Hilfe!!!:
Und dabei zerstückelst mit gut glück das gesuchte wort.
wenn das letzte zeichen des buffers kein whitespace ist, kopierst du die zeichen zwischen dem letzten whitespace und buffer-ende nach vorn (memcpy) und füllst den rest des buffers mit dem nächsten fgets()-call auf. dann kannste wieder strtok machen.
das mag für dich vielleicht zu kompliziert sein, ist aber recht einfach. besser jedenfalls, als irgendwelche malloc-realloc-free-orgien.
buffer-größe? nimm 1024. so lange wörter schreibt kein mensch.
-
oder die fscanf-variante, kurz und knackig:
void read_words (FILE *f) { char x[1024]; while (fscanf(f, " %1023s", x) == 1) { puts(x); } }
gesehen auf stackoverflow.com.
hat hoffentlich keinen overflow.
-
@RBS2 sagte in Bitte um Hilfe!!!:
das mag für dich vielleicht zu kompliziert sein, ist aber recht einfach. besser jedenfalls, als irgendwelche malloc-realloc-free-orgien.
Du findest also
strtok()
- und Herumkopierorgien besser als von Anfang an das zu lesen, was man braucht. Ja ne, klingt logisch ^^@RBS2 sagte in Bitte um Hilfe!!!:
oder die fscanf-variante
... ist genau was ich mache. Nur eben mit passender Puffergröße.
-
@Wade1234 ok vielen dank ich melde mich für weitere Probleme falls ich auf welche zustöße
-
@Swordfish sagte in Bitte um Hilfe!!!:
... ist genau was ich mache.
Bloß brauchst du fast 100 Zeilen dafür.
-
@RBS2 Mein Physikprof hat immer gesagt: "Schreibarbeit ist keine Arbeit.". Für
format
ginge auch eine feste Größe ... dann sinds schon mal ~20 Zeilen weniger.Zeig doch deine tolle Variante ...
-
@Swordfish sagte in Bitte um Hilfe!!!:
Zeig doch deine tolle Variante ...
Hier, knapp 30 Zeilen:
#include <stdio.h> #include <stdlib.h> #include <memory.h> #define STOP(x) {puts(x);exit(-1);} int main(int argc, char* argv[]) { if (argc != 3) STOP ("1st arg: file name, 2nd arg: needle"); FILE *fp = fopen (argv[1], "r"); if (fp == 0) STOP ("Can't open ..."); int n=0, found=0; char word[1024]; while (fscanf(fp, " %1023s", word) == 1) { n++; if (!strcmp (word, argv[2])) { found++; printf ("\'%s\' is at pos. %d\n", argv[2], n); } } printf ("Found \'%s\' %d times.\n", argv[2], found); }
Spuckt aus:
'Sachverwalter' is at pos. 1
'Sachverwalter' is at pos. 9
'Sachverwalter' is at pos. 10
Found 'Sachverwalter' 3 times.beim Input:
Sachverwalter
hallo das is ein text mustermann
muster
Sachverwalter Sachverwalter
pluster
-
@RBS2 Ein Makro, really??
@RBS2 sagte in Bitte um Hilfe!!!:
exit(-1);
Mhm.
EXIT_FAILURE
ftw.Was soll das
n
? Das hat doch keine relation zu der Position in der Datei.
-
@Swordfish sagte in Bitte um Hilfe!!!:
@RBS2 Ein Makro, really??
@RBS2 sagte in Bitte um Hilfe!!!:
exit(-1);
Mhm.
EXIT_FAILURE
ftw.Was soll das
n
? Das hat doch keine relation zu der Position in der Datei.n ist die Wortnummer.
Was hast du gegen Makros?