Wortfilter Zeiger
-
Ich habe jedzt ein kleines Beispiel Code geschrieben indem geprüft wird ob das Wort "Ok" geschrieben wurde. Fals schon soll "Ungueltig" stehen.
Und da hatte ich einen gebrauch für die Zeiger gefunden
.Nun meine Frage, kann ich das noch verbessern oder würdet ihr das auch so prüfen ob das Wort "Ok" geschrieben wurde (aber mit C-Strings :P).
#include <iostream> using namespace std; int main(){ char chat[1000]; //Das ist jedzt ein wenig viel^^ cin >> chat; char *zeiger=chat; if(*zeiger == 'O'){ *zeiger++; if(*zeiger == 'k'){ *zeiger++; if(*zeiger == '\0'){ cout << "Ungueltig"; } } } return 0; }
-
#include <iostream> #include <string> using namespace std; int main(){ string chat; //Das ist jedzt (sic) weder zu viel, noch zu wenig cin >> chat; if (chat == "Ok") cout << "Ungueltig"; }?
Falls C-Strings:
1. Bufferoverlow beim Einlesen verhindern!
2. strcmp?
3. Wenn schon Zeiger (zum Beispiel bei selbstgeschriebenem strcmp), dann auch die Profi-Hacker-Syntax :p :irgendwas(*zeiger); zeiger++; // wird zu irgendwas(*zeiger++);In dem Zusammenhang: Erklär mal den Stern in deiner Zeile 9
-
Okay ..

Ich meine falls jemand das so macht. Ohne andere Hilfsmittel.#include <iostream>
#include <string>
using namespace std;int main(){
string chat; //Das ist jedzt (sic) weder zu viel, noch zu wenig
cin >> chat;
if (chat == "Ok")
cout << "Ungueltig";
}Ist mir klar das man das auch so machen kann. ^^
Und mit Bufferoverflow ist gemeint:
char chat[1000];?
Und wenn ja wie kann man das verhindern. Weil ich kann ja nicht jedesmal eine so hohe Zahl eingeben.
-
//Edit: Habe unwichtigen Text entfernt
SeppJ schrieb:
irgendwas(*zeiger); zeiger++; // wird zu irgendwas(*zeiger++);ABer dann habe ich ja wieder
*zeigerInkrementiert.
SeppJ schrieb:
In dem Zusammenhang: Erklär mal den Stern in deiner Zeile 9
Stimmt der "*" hat in Zeile 9 nichts zu suchen, weil ich will ja nur die Adresse verändern nicht den Inhalt (wenn das so richtig ist).
-
Skeptar schrieb:
//Edit: Habe unwichtigen Text entfernt
SeppJ schrieb:
irgendwas(*zeiger); zeiger++; // wird zu irgendwas(*zeiger++);ABer dann habe ich ja wieder
*zeigerInkrementiert.
SeppJ schrieb:
In dem Zusammenhang: Erklär mal den Stern in deiner Zeile 9
Stimmt der "*" hat in Zeile 9 nichts zu suchen, weil ich will ja nur die Adresse verändern nicht den Inhalt (wenn das so richtig ist).
Hast du deinen Code mal getestet? Falls er funktioniert hat, dann kann eine dieser Aussagen nicht stimmen.
Ansonsten:
http://en.wikipedia.org/wiki/Buffer_overflow
-
SeppJ schrieb:
Hast du deinen Code mal getestet? Falls er funktioniert hat, dann kann eine dieser Aussagen nicht stimmen.
Ja habe ich und er funktioniert auch.
ALso ich weiß es dann nicht.
Könntest du es mir eventuell erklären?
-
Skeptar schrieb:
SeppJ schrieb:
Hast du deinen Code mal getestet? Falls er funktioniert hat, dann kann eine dieser Aussagen nicht stimmen.
Ja habe ich und er funktioniert auch.
ALso ich weiß es dann nicht.
Könntest du es mir eventuell erklären?
Ein paar Ausdrücke als Hinweis. Sag mal, was raus kommt bzw. passiert:
(5 + 7) * 8 5 + (7 * 8) 5 + 7 * 8 (*pointer)++ *(pointer++) *pointer++
-
Hilfreicher Link: C++ Operator Precedence.
-
(5 + 7) * 8. //5+7=12*8=96 5 + (7 * 8). //7*8=56+5=61 5 + 7 * 8. //7*8=56+5=61 (punkt vor strich) (*pointer)++ //erst *pointer dann ++ *(pointer++). //erst pointer ++ dann pointer* *pointer++ //hier von vorne nach hinten oder auch Punkt vor strich ?So ich hoffe ich habe das richtig verstanden und mich nicht verrechnet

-
Das letzte ist falsch. Du inkrementierst den Zeiger und dereferenzierst ihn danach.
-
Skeptar schrieb:
*pointer++ //hier von vorne nach hinten oder auch Punkt vor strich ?Ich hatte eigentlich gehofft, dass du in der Lage wärst, dir dies selber zu erschließen. Sei es durch Suche im Internet, Ausprobieren oder durch Lesen dieses Threads. Bist du mal dem Link von Arcoth gefolgt?