strncmp richtige Verwendung

Hier der kurze hintergrund: ich habe ein client-und ein server-Programm, dass die Kommunikation mit jedem anderen über einen Unix-socket. Beim Parsen der empfangenen Nachrichten auf der server-Seite bin ich versucht, strncmp, um herauszufinden, was zu tun ist.

Das problem das ich habe, ist, herauszufinden, was genau für die Länge-argument von strncmp. Der Grund dafür ist, problematisch ist, dass einige meiner Nachrichten, die ein gemeinsames Präfix. Ich habe zum Beispiel eine Nachricht "getPrimary", die bewirkt, dass der server antwortet mit einem primär-server-Adresse und eine Nachricht "getPrimaryStatus", die bewirkt, dass der server antwortet mit dem status der primären server. Mein Erster Gedanke war, das folgende zu tun:

if(strncmp(message,"getPrimary",strlen("getPrimary"))==0){
    return foo;
}
else if(strncmp(message,"getPrimaryStatus",strlen("getPrimaryStatus"))==0){
    return bar;
}

Das problem mit diesem ist, wenn ich den server "getPrimaryStatus", der code wird immer return foo, weil strncmp ist die Prüfung nicht weit genug in der Zeichenfolge. Ich könnte passieren in strlen(message) als length-argument, strncmp, aber dies scheint die Niederlage der Zweck der Verwendung strncmp, zu verhindern, dass überlauf im Falle von unerwarteten Eingang. Ich habe eine statische variable für die maximale Länge der Nachricht kann ich Lesen, aber es scheint, wie an das in als die Länge ist nur sicher, wenn die Nachricht überläufe, die Auswirkungen minimiert werden.

Habe ich ein paar Lösungen, aber Sie sind nicht sehr hübsch, so dass ich Frage mich, ob es einen gemeinsamen Weg des Umgangs mit diesem problem.

Referenz, meine aktuellen Lösungen:
Um meine if /else if-Anweisungen in einer Weise, dass, dass alle Nachrichten mit gemeinsamen Präfixen sind geprüft, in der Reihenfolge absteigender Länge (das scheint wie ein wirklich guter Weg, um zu werfen eine landmine in meinem code für jeden, der versucht, etwas hinzufügen, um es später auf).

Gruppe meine Nachrichten mit gemeinsamen Präfixen zusammen und nach dem suffix der ersten:

if(strncmp(message,"getPrimary",strlen("getPrimary"))==0){
    if(strncmp(message,"getPrimaryStatus",strlen("getPrimaryStatus"))==0){
        return bar;
    else
        return foo;
    }
}

Aber das fühlt sich einfach chaotisch, vor allem, da ich über 20 verschiedene mögliche Nachrichten, die ich bin-handling.

Erstellen Sie ein array von allen möglichen Nachrichten, die ich haben, fügen Sie eine Funktion hinzu, um meine init-Sequenz, um das array in absteigender Länge, und habe auch meine code-Suche durch die Elemente der Liste, bis es eine übereinstimmung findet. Dies scheint kompliziert und albern.

Wie es scheint, dies sollte eine gemeinsame genug Thema, dass es sollte eine Lösung sein, für die es irgendwo, aber ich habe nicht in der Lage gewesen, irgendetwas zu finden, so weit.

Vielen Dank im Voraus für die Hilfe!

InformationsquelleAutor Jordan Wills | 2010-12-03

Schreibe einen Kommentar