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 searchString[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.