2 Stimmen

Falscher Vergleich von Zeichenkette und char*

Mein Programm erhält eine Eingabe von einem Port und dann sende ich diesen String, um ihn gegen ein paar Strings zu überprüfen. Zuerst versuchte ich, im Java-Stil zu vergleichen, indem ich nur "myString" benutzte, aber ich bekam eine 13 (dreizehn) bei Vergleich. Ich dachte, es liegt daran, dass ich einen Zeiger auf Zeichen verwenden sollte, aber ich erhalte immer noch 13. Dann sah ich, dass der Puffer mit einer neuen Zeile übergeben wurde, also fügte ich \n hinzu, aber ich erhielt 3 (drei). Von hier aus weiß ich nicht, wie ich es auf 0 reduzieren soll. Es muss etwas damit zu tun haben, wie ich den String übergebe.

Den String erhalten:

bzero(buffer,256);
n = read(sockfd,buffer,255);
if (n < 0) 
    error("FEHLER beim Lesen vom Socket");
printf("String am Anfang: %s",buffer);
testingMethod(buffer);

Die Testmethode lautet:

void testingMethod(char *string) {
    char *button = "mystring";
    printf("myString: %s-", string);
    printf("strcmp: %i", strcmp(myString,button));
...
}

Ausgabe:

String am Anfang: mystring
string: mystring
-strcmp: 13 //BEACHTEN Sie das - in der nächsten Zeile.

2voto

md5 Punkte 23267

Es gibt ein übrig gebliebenes Zeilenschaltungszeichen ('\n') in Ihrem String. Sie müssen es nur entfernen:

#include 

/* Gibt einen Zeiger auf das letzte Zeilenschaltungszeichen im String zurück. */
char *pend=strrchr(string, '\n');

/* Vermeidet das undefinierte Verhalten, indem pend gegen NULL überprüft wird. */
if(pend!=NULL) *pend='\0';

1voto

Daniel Fischer Punkte 178428

13 ist der ASCII-Wert von '\r', sodass du einen abschließenden Wagenrücklauf hast. Du kannst entweder ein '\r' hinzufügen - und höchstwahrscheinlich auch ein '\n' - zu einem,

char *button = "meinestring\r\n";

oder es vom anderen entfernen, um Gleichheit beim Vergleichen zu erreichen.

0voto

Alec Danyshchuk Punkte 307

Führen Sie Ihr Programm in gdb mit einem Break auf der strcmp-Zeile aus, dann können Sie print /x myString und print /x button ausführen und die beiden visuell vergleichen. Es wird einen Unterschied geben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X