Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Datei einlesen -> suchen

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
gekko247



Anmeldungsdatum: 22.03.2005
Beiträge: 5

BeitragVerfasst am: 20. März 2010 9:45   Titel: Datei einlesen -> suchen

Hallo Zusammen,

ich befasse mich seit kurzen mit C.
Code:

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

int main()

{

FILE *file;
char input[300];
char* Ergebnis;

/*Einlesen */

file = fopen ( "suchen.txt" , "r" );

if ( NULL == file )

{

printf ("Datei nicht gefunden.\n");

return 1;
}

else

{

fgets ( input, 300, stdin );

Ergebnis=strstr(file,input);

printf("%s\n\n",Ergebnis);

}

return 0;

}


Ich bekomme folgende Fehlermeldung:
Code:

Warnung: Uebergabe des Arguments 1 von »strstr« von inkompatiblem Zeigertyp


Mir ist da nicht ganz klar, was da falsch ist.


mfg
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 21. März 2010 4:44   Titel:

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
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

gekko247



Anmeldungsdatum: 22.03.2005
Beiträge: 5

BeitragVerfasst am: 21. März 2010 5:32   Titel:

Zitat:

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
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 21. März 2010 14:28   Titel:

Du hast nicht gesagt was du erreichen willst. Wie soll man dir dann erklären, wie das am besten geht?

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

gekko247



Anmeldungsdatum: 22.03.2005
Beiträge: 5

BeitragVerfasst am: 21. März 2010 16:54   Titel:

HI,
Zitat:

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:

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

int main()

{

FILE *file;
char input[300];
char* Ergebnis;

/*Einlesen */

file = fopen ( "suchen.txt" , "r" );

if ( NULL == file )

{

printf ("Datei nicht gefunden.\n");

return 1;
}

else

{

printf ("Bitte geben Sie das gesuchte wort ein! ");

fgets ( input, 300, stdin );

Ergebnis=strstr(file,input);

printf("%s\n\n",Ergebnis);

}

return 0;

}

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:

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
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 21. März 2010 23:40   Titel:

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
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

Newbee



Anmeldungsdatum: 26.06.2010
Beiträge: 4
Wohnort: Berlin

BeitragVerfasst am: 05. Jul 2010 23:38   Titel:

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 Smile

Grüße, Newbee
_________________
never dismiss a plan, try time and again
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy