Page 1 of 1

Datei einlesen -> suchen

Posted: 20. Mar 2010 9:45
by gekko247
Hallo Zusammen,

ich befasse mich seit kurzen mit C.

Code: Select all

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main&#40;&#41;

&#123;

FILE *file;
char input&#91;300&#93;;
char* Ergebnis;

/*Einlesen */

file = fopen &#40; "suchen.txt" , "r" &#41;;

if &#40; NULL == file &#41; 

&#123;

printf &#40;"Datei nicht gefunden.\n"&#41;;

return 1;
&#125;

else

&#123;

fgets &#40; input, 300, stdin &#41;;

Ergebnis=strstr&#40;file,input&#41;;

printf&#40;"%s\n\n",Ergebnis&#41;;

&#125;

return 0;

&#125;
Ich bekomme folgende Fehlermeldung:

Code: Select all

Warnung&#58; Uebergabe des Arguments 1 von »strstr« von inkompatiblem Zeigertyp
Mir ist da nicht ganz klar, was da falsch ist.


mfg

Posted: 21. Mar 2010 4:44
by Janka
Du hast oben "file" als einen Zeiger auf eine Struktur vom Typ "FILE" definiert und benutzt das auch entsprechend mit fopen(). Unten willst du "file" aber in der Funktion strstr() benutzen. Diese Funktion braucht zwei Zeiger auf nullterminierte char-Arrays, um richtig zu funktionieren.

Im übrigen ist das eine Warnung, kein Fehler. C hindert dich nicht daran, dir auf diese Weise in den Fuß zu ballern. Das macht erst der Prozessor, wenn er den Mist dann ausführen soll. Schwankend zwischen ungewolltem Ergebnis und SIGSEGV vermutlich.

Janka

Posted: 21. Mar 2010 5:32
by gekko247
Du hast oben "file" als einen Zeiger auf eine Struktur vom Typ "FILE" definiert und benutzt das auch entsprechend mit fopen(). Unten willst du "file" aber in der Funktion strstr() benutzen. Diese Funktion braucht zwei Zeiger auf nullterminierte char-Arrays, um richtig zu funktionieren.
Ich stehe mit C ziemlich am Anfang,wie muss das genau aussehen?

mfg

Posted: 21. Mar 2010 14:28
by Janka
Du hast nicht gesagt was du erreichen willst. Wie soll man dir dann erklären, wie das am besten geht?

Janka

Posted: 21. Mar 2010 16:54
by gekko247
HI,
Du hast nicht gesagt was du erreichen willst. Wie soll man dir dann erklären, wie das am besten geht?
Ich habe das Programm noch einmal modifiziert.

Code: Select all

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main&#40;&#41;

&#123;

FILE *file;
char input&#91;300&#93;;
char* Ergebnis;

/*Einlesen */

file = fopen &#40; "suchen.txt" , "r" &#41;;

if &#40; NULL == file &#41; 

&#123;

printf &#40;"Datei nicht gefunden.\n"&#41;;

return 1;
&#125;

else

&#123;

printf &#40;"Bitte geben Sie das gesuchte wort ein! "&#41;;

fgets &#40; input, 300, stdin &#41;;

Ergebnis=strstr&#40;file,input&#41;;

printf&#40;"%s\n\n",Ergebnis&#41;;

&#125;

return 0;

&#125;
Im Grunde soll das Programm ein Deutsch-Spanisch Wörterbuch werden.
Mir ist schon klar, das dies einfacher mit einer Datenbankabfrage zu realisieren ist, aber das ganze soll mehr als Lernfaktor dienen.

Die Datei suchen.txt ist so aufgebaut.

Code: Select all

wir gehen        ;   vamos
das zuhause   ;   la casa
Also soll nach einen vordefinierten Suchparameter in Datei suchen.txt gesucht werden und alle Ergebnis wo der Suchbegriff vorkommt, ausgegeben werden.

mfg

Posted: 21. Mar 2010 23:40
by Janka
Wenn du ernsthaft mit C programmieren willst, solltest du mit so wenig Stringverarbeitung wie nur irgend möglich anfangen. Das ist in C nämlich sehr aufwendig, fehleranfällig und in der Konsequenz für Anfänger frustrierend.

Was du tun willst, verlangt grundsätzlich nach sehr sehr viel Programmcode. Du musst die Datei zeilenweise auslesen (fgets()), dabei jede Zeile z.B. mit strtok() am ; in zwei Teilstrings aufteilen und dann jeweils prüfen, ob der erste Teilstring identisch mit der Benutzereingabe ist. Diesen letzten Schritt kannst du dann mit strstr() (oder simpler mir strcmp()) machen. Regexes oder so'n Zeug kann das dann immer noch nicht, dafür braucht man nochmals viel mehr Programmcode.

Ich mache es nach Möglichkeit so, dass ich ein Skript für alle String-intensiven Teile eines Programms bastle und nur die zeitkritischsten Sachen in C programmiere.

Janka

Posted: 05. Jul 2010 23:38
by Newbee
Hallo,
ich sehe das etwas anders als Janka - Du mußt Dich auch mit den komplizierten Sachverhalten der Sprache so wie Stringverarbeitung auseindersetzen; das wäre sonst so wie eine Fremdsprache, die man abbricht, weil schwierige Probleme auftauchen.
Sicher gibt's einfachere Varianten z.B. über Skripte, aber man möchte ja gern alles aus einem Guß haben.
Wenn es okay für Dich ist, verwende ich Deinen Quellcode und probiere mal ein wenig.
Bin leider etwas raus aus der Materie, möchte aber wieder reinkommen.
Falls ich die Lösung finde und sie sonst keiner bringt poste ich sie hier - wird etwas dauern.
Das Programmierziel Wörterbuch finde ich gut :-)

Grüße, Newbee