Zeichenfolge im Text suchen

Also die Funktion von Flegmon ist nicht schlecht, aber noch Fehlerhaft.
Es ist nicht möglich einen Text zu durchsuchen der größer ist als das Wort wonach man sucht. Wenn man es doch tut kommt eine Zugriffsverletzung(Fehlermeldung).

Ausserdem wird beim durchsuchen des Textes "Hal" das Wort hallo 1 mal gefunden.

Weiß jemand woran das liegt?
 
es ist ja auch nicht gedacht, nach einem Wort zu suchen, dass sowieso nicht vorkommen kann, weil der eigentliche String zu kurz ist.

Bau einfach eine

C++:
if(strlen(str) < strlen(strToFind))
 return 0;

direkt am Anfang ein, dann gehts

EDIT: und es ist möglich einen Text zu durchsuchen, der größer ist als das Wort! Es kommt kein Fehler
 
Zuletzt bearbeitet:
Ich durchsuche nun folgende Texte auf ein beliebiges Wort aus 5 Buchstaben(zB "Hallo"):
"EinLangesWort" ----> Fehler
"ha ha ha" ---------------> Fehler
"asdfg" --------------------> kein Fehler
"asdfga" ------------------> Fehler

Durch etwas testen stellt sich heraus, das bei allen Texten die größer sind als das Suchwort folgender Fehler kommt:
Code:
Zugriffsverletzung bei Adresse 00401A3D. Lesen von Adresse 008A8000.
 
Das Problem ist, das Flegmon vergessen hat die Stringterminierung mit einzuberechnen.
C++:
char* str0 = new char[strlen(str) + 1];
...
for(int i = 0; i <= strlen(str); i++)
{
        str0[i] = str[i];
        if(str0[i] > 64 && str0[i] < 91)
            str0[i] += 32;
}

Gruß

/edit: Funktion zur Suche ohne Beachtung der Groß-/Kleinschreibung: strcasestr
 
Zuletzt bearbeitet:
Ich hab sie bewusst nicht mitkopiert, deswegen nutze ich bei strlen immer die übergebenen Strings. Nur finde ich es komisch, dass es bei mir nicht zu fehlern kommt...
Selbst im Release funktionierts wie es soll -.-

Vllt liegts am Compiler. Ich hab VC++ .net 2003
 
Flegmon hat gesagt.:
Ich hab sie bewusst nicht mitkopiert, deswegen nutze ich bei strlen immer die übergebenen Strings. Nur finde ich es komisch, dass es bei mir nicht zu fehlern kommt...
Selbst im Release funktionierts wie es soll -.-
Ok. Da hätte ich wirklich etwas genauer hinschauen müssen.

Jetzt hab ich es mir genauer angeschaut und getestet. Für die Werte die Kaiser206 angegeben hat funktioniert die Funktion bei mir. (Compiler: GCC 3.4.2 MinGW)

Gruß
 
Zurück