char** argv -> ip-adresse -> prüfen
-
willst nur checken, ob das ding ne ip sein könnte ....
also immer 1-3ziffern, punkt, 1-3ziffern, punkt, 1-3ziffern, punkt, 1-3ziffern ...genau das will ich

es scheint ich muss hand anlegen

c++ mit g++ auf linux
danke
-
Du könntest das recht simpel mit boost::regex oder Poco::RegEx lösen.
-
Das geht auch mit Streams oder gar mit sscanf ziemlich simpel.

-
Das geht mit der Funktion inet_addr.
-
Ach sorry, ist wahrscheinlich doch nicht was du suchst, da die Funktion mehrere Formen akzeptiert.
-
ich versuche mit <regex.h> und regexec() regcomp() die ip zu validieren.
int isIp(char* ip) { int result; regex_t reg; if (regcomp(®,"\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b",REG_EXTENDED|REG_NOSUB)!=0) { return -1; } result = regexec(®, ip, 0, 0, 0); regfree(®); return result; }compiler ausgabe:
g++ -Wall -c client.cpp -o peer_01.o
client.cpp: In function 'int isIp(char*)':
client.cpp:28: error: unknown escape sequence '\.'
client.cpp:28: error: unknown escape sequence '\.'
client.cpp:28: error: unknown escape sequence '\.wieso mag er das \. nicht??
-
grizzel schrieb:
...
wieso mag er das \. nicht??Was soll denn '\.' Deiner Meinung nach sein ?
Merke: Ein einzelnes \ kennzeichnet nur ein "Achtung, jetzt kommt ein Sonderzeichen" (= "escape character", der eine "escape sequence" einleitet) ... und davon kennt der compiler nur ein paar (u.a. das b, das Du ganz am Anfang verwendest -> '\b'; aber eben kein '\.'.
Beide zusammen bilden nur EIN Zeichen.
Wenn man das Zeichen \ darstellen will, macht man das über '\' (= "Achtung: Hier soll ein backslash stehen").Gruß,
Simon2.
-
\.
soll meiner meinung nach sagen: ACHTUNG jetzt kommt ein . und nicht das sonderzeichen .???
-
grizzel schrieb:
\.
soll meiner meinung nach sagen: ACHTUNG jetzt kommt ein . und nicht das sonderzeichen .Was den Regulären Ausdruck angeht hast du schon Recht, es geht hier aber um C++. Um in einem C/C++-String ein '\' zu schreiben, muß im Quelltext '\' stehen. Dementsprechend mußt du hier '\.' schreiben. Der erste Backslash ist für den Compiler, der zweite für den RegEx. Etwas unübersichtlich, aber wenn man drüber nachdenkt ergibt das schon Sinn

-
hab diesen regulären ausdruck gebaut um ip adressen zu validieren:
^((2[0-5][0-5]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(2[0-5][0-5]|1[0-9][0-9]|[1-9][0-9]|[0-9])$
mögliche adressen: 0.0.0.0 - 255.255.255.255