strstr() funktioniert nicht über Funktionsaufruf



  • Hallo Zusammen.
    Ich möchte erstmal alle recht herzlichst begrüßen, da ich in diesem Forum neu bin. Ich bin zwar kein blutiger Anfänger aber ich würde mich dennoch als Frischling bezeichnen. Ich arbeite mich in die Materie wieder grundlegend ein. Hierfür habe ich mir das Buch von O'reilly "Head First C" zugelegt. Das Buch dient mir als reines Übungsbuch. Ich bin bei den Übungung bei Pointern und Arrays auf folgendes Problem gestoßen:

    Ich versuche über die Funktion "searchWord" die songliste Zeile für Zeile nach einem String zu überprüfen. Wenn ich die Funktion strstr() direkt aufrufe, mit dem String "Du", dann funktioniert die Ausgabe. Erfolgt die Suche über die Konsoleneingabe oder indirekt über den Methodenaufruf, dann scheitert die Ausgabe und gibt mir nur "null" zurück.

    Ich bin mir nicht sicher ob das ein Compilierproblem ist, das es im Lehrbuch so funktioniert. Als Betriebssystem benutze ich Windows 7 mit der Umgebung Eclipse + gcc 4.6.1. Kompiliert wird mit
    gcc -O0 -g3 -Wall -c -fmessage-length=0 -o hallowelt.o ..\hallowelt.c
    und mein Code sieht wie folgt aus.

    #include <stdio.h>
    #include <string.h>
    
    char songlist[][80] = {
    		"Ich kam, sah und siegte!",
    		"Du bist der Koenig der Welt!",
    		"Ich habe dir so gern",
    		"Ich wäre so gerne Millionaer!",
    		"Wer wagt, gewinnt!"};
    
    void searchWord(char searchcode[]){ //Pointer wird auto. übergeben
    	int i;
    	for(i=0; i<5; i++){
    		if(strstr(songlist[i], searchcode)) printf("Test 3 - Habe was gefunden bei Zeile %i: '%s'\n", i, songlist[i]);
    	}
    }
    
    int main(){
    	char searchString[80];			//Char Array für 80ig Zeichen erstellen
    	puts("Suchkennwort eingeben:");
    	fgets(searchString, 80, stdin);	//Eingabe der Tastatur erwarten und max. 80 Zeichen entgegennehmen
    	printf("Suchwort %s\n", searchString);						//Ausgabe meines Suchstrings
    	printf("Test 1 - %s\n", strstr(songlist[1], "Du"));			//Ergibt "Test 2 Du bist der Koenig der Welt!"
    	printf("Test 2 - %s\n", strstr(songlist[1], searchString));
    	searchWord(searchString);
    	return 0;
    }
    

    Vielleicht könnt ihr mir weiterhelfen. Manchmal sieht man den Wald vor lauter Bäumen nicht. Vielen Dank für jegliche Hilfe.
    Mfg



  • Wenn du dir die Ausgabe vom Programm mal genau ansiehst, sollte da

    Suchwort DeineEingabe
    
    Test 1 - ...
    

    mit einer Leerzeile dazwischen stehen.
    Der extra Zeilenvorschub steht mit in dem String searchString.
    Das liegt daran, das fgets das '\n' (von der Entertaste) mit abspeichert.

    Du kannst das '\n' vorher mit '\0' überschreiben.
    Entweder mit strrchr suchen (das ist sicher) oder über s earchString[strlen(searchString)-1] = '\0'; einfach zuweisen.



  • Vielen Dank. Das wars. Schon fast peinlich. 😞



  • Ist ein klassischer Anfängerfehler, leider auch von Fachautoren oft begangen.
    Denke auch daran, dass bei Verwendung von Zeichen außerhalb des 7-Bit-ASCII Bereiches ( dt. Umlaute u.ä. ) evtl. die Sprachumgebung für die 'richtige' Arbeit von strstr vonnöten ist.


Anmelden zum Antworten