PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage / Problem zu C++ und strings



Stoneman
04.07.2006, 19:26
Hallo,
ich habe hier ein kleines Problem, ich bekomme über eine Netzwerkverbindung mit recv ein char Array (Länge 32) rein und nun will ich dieses char Array auf bestimmte Werte überprüfen, d.h. ich will gucken, ob da nur ein a oder so drinsteht, oder ob da ein Befehl drin ist.

ich habe da schon mal was mit strcmp probiert, aber das läuft nicht so wie ich will, eigentlich gar nicht.

Mit freundlichen Grüßen

Stoneman

linux_80
04.07.2006, 20:08
Wenn Du C++ hast, kannst Du doch mit dem Typ string arbeiten, dann kann man in etwa so machen:


string strname = "hoppala";
if (strname.substr(3,1) == "a") {
// huch ein a ist da !
}

strcmp geht zwar auch, ist ansonsten für C ohne +

Stoneman
04.07.2006, 22:49
jo das ist aber eignetlich nicht das was ich suche, ich brauche etwas was mir

while ((recvMsgSize = sock->recv(echoBuffer, RCVBUFSIZE)) > 0) {
// Echo message back to client
sock->send(echoBuffer, recvMsgSize);
}

hier den vergleich erlaubt ob in echoBuffer nur ein q oder nur eine gesuchte Zeichenfolge drin steht (natürlich noch steuerzeichen), d.h.

echoBuffer = "q" -> erkennen
echoBuffer = "quer" -> nichterkennen

das klappt mit strcomp nicht, wahrscheinlich aber auch deshalb, weil ich nicht weiß, was Telnet für steuerzeichen sendet.

Mfg

Stoneman

sast
05.07.2006, 07:07
wenn du Befehle nach einem festgelegten Protokoll suchst, kannst du das Array in einer Schleife nach dem ersten möglichen Zeichen durchsuchen, und anschließend überprüfen, ob das nächste Zeichen zum Protokoll passt. Am besten, ist natürlich bei nicht festgelegten Längen, wenn du auch noch ein Endezeichen hast.

sast

PicNick
05.07.2006, 08:19
.. Telnet für steuerzeichen ..
Na, eh' das Übliche:
Mach Folgendes:

recvMsgSize = sock->recv(echoBuffer, RCVBUFSIZE))
if (!recvMsgSize) break; // da is was kaputt

while (recvMsgSize)
{
recvMsgSize--;
if echoBuffer[recvMsgSize] > 0x20) // "TRim"->letztes Zeichen KEIN steuerzeichen
break;
}
echoBuffer[recvMsgSize] = 0x00; // ein "echter" ASCIZ string
if (strcmp(echoBuffer, "dudeldei") == 0) {}
if (strcmp(echoBuffer, "Q") == 0) {}
if (strcmp(echoBuffer, "Quack") == 0) {}

SprinterSB
05.07.2006, 09:30
Ein fast HW-unabhängiges Beispiel, das soas macht findest du in Sprungtabelle (https://www.roboternetz.de/wissen/index.php/Avr-gcc#Sprungtabelle)

Im Endeffekt ist's das was PicNick schon geschrieben hat, nur mit einer Schleife drumrum.

vajk
05.07.2006, 10:02
öhm .. schon mal mit
strchr
strstr
strtok
auseinandergesetzt ?
Alle (inkl. strcmp - würbe besser strncmp nehmen) sind case-sensitiv .. also ggf ein strupr machen ....

PicNick
05.07.2006, 10:36
öhm .. schon mal mit...auseinandergesetzt ?

Haben wir. Für ernsthaftes Parsen is das aber nix.

Stoneman
05.07.2006, 11:12
So ich habe das jetzt hinbekommen, und zwar habe ich zuerst \r und \n durch ein 0x20 ersetzt und dann den Code von PicNick verwendet, vielen Dank für eure Hilfe

Mfg

Stoneman

vajk
05.07.2006, 11:34
... Für ernsthaftes Parsen is das aber nix.
Das sehe ich anders. Nicht schlechter als ein strcmp !

PicNick
05.07.2006, 12:32
strcmp() is ok. Für normalisierte Daten ist er gut, berücksichtigt die Länge, und reicht in vielen (meisten) Fällen.
Die anderen überlaß' ich Dir zur freien Verwendung, ich werd' Dir da nix dreinreden.

vajk
05.07.2006, 12:51
na prima - mich würde Deine Begründung für Deine Aussage "ernsthaftes Parsen is das aber nix" interessieren !!!!!

PicNick
05.07.2006, 13:03
Ist im Grunde leicht gesagt, wenn auch etwas allgemein: wenn der Input komplexer wird und syntaktischen Regeln unterliegt.
Beispiel, fällt mir grad ein: Mail holen vom Server

vajk
05.07.2006, 13:58
achso ... so meinst Du das, ich dachte schon, Du hast die strxxx-Befehle analysiert und was schreckliches festgestellt ...
... natürlich ist die Verwendung der einzelnen Befehlchen abhängig davon, was man(oder frau) damit erreichen will ... wollte nur dran erinnern, daß es außer strcmp eben noch andere möglichkeiten gibt, die natürlich besonders beim Parsen von bekannten Inhalten helfen. .... Danke.

PicNick
05.07.2006, 14:08
..abhängig davon, was man(oder frau) damit erreichen will ..

Mit der Aussage können wir wohl alle gut leben :-)