Guten Morgen! Ich habe ein Frage zu dem folgenden Quelltext, der lieder nicht so funktioniert wie ich mir das denke! char buf1[8]; char buf2[8]; strcpy(buf2,"out"); strcpy(buf1,"out"); if(strcmp(buf1,buf2)) { break; } else { printf(..) } Warum springt dieser nicht in die if - Anweisung, sondern nach else...? Ich möchte einfach die beiden buf1 und buf2 vergleichen! Aber es funktioniert nicht..., sind diese gleiche möchte ich die break Anweisung ausführen!
Musst du sie dann nicht auch über == vergleichen? So genau kenne mich nun auch wieder nicht aus aber so würde ich das machen.
ja geht auch...soweit ich das rcihtig in Erinnerung habe if(strcmp(buf1,buf2)==1) Aber ist funktioniert nicht...!
strcmp gibt bei Gleichheit der verglichenen Strings eine "0" zurück und keine "1"! Wenn bei Gleichheit in den if-Zweig gesprungen werden soll, dann muss die Abfrage lauten
1 | if(!strcmp(buf1,buf2)) |
2 | {
|
3 | //Code
|
4 | }
|
5 | else
|
6 | {
|
7 | //Code
|
8 | }
|
Wenn der "Wert" des ersten Strings kleiner ist, als der des zweiten, dann wird eine negative Zahl zurückgegeben, wenn er größer ist, dann eine positive.
Schau dir das mal an: void main(void) { char *str1= "aaa", *str2= "bbb", *str3 = "ccc"; int ptr; ptr = strcmp(str2, str1); if (ptr > 0) printf("String2 ist grösser als String1\n"); else printf("String2 is kleiner als String1\n"); ptr = strcmp(str2, str3); if (ptr > 0) printf("String2 ist grösser als String3\n"); else printf("String2 ist kleiner als String3\n"); } Da wird das Ergebnis des Vergleichs nochmal in ein Integer gesteckt!
Hallo ! Ich habe noch mal einen Nachtrag zu meinem eigentlich gelösten Problem ! Folgende Ausgangspunkt: char buf1[8]; char buf2[8]; strcpy(buf1,"out"); printf("%s\n",buf2) if(!strcmp(buf1,buf2)) { break; } else { printf(..) } Jetzt will (versuche) ich buf2 über den seriellen Port einzulesen! Wird ein "out2 eingelesen, erfolgt die if Anweisung, falls nicht erfolgt die else Anweisung Allerdings klappt das wiederum nicht... Nun, zur Kontrolle habe ich mir den Wert des buf2 über nen printf-Befehl, vor der if-Schleife anzeigen lassen. Soweit sogut, das paßt auch! Ich denke mal, dass durch das einlesen, Leerzeichen mit in den String kommen, die dann den Unterschied zu buf1 ausmachen. Kann das sein ?? buf2[8] Falls ja, gibt es eine Abhilfe dafür ?? Ich hoffe, mein Problem ist verständlich ;-)
Versuche mal
1 | printf("!%s!\n",buf2); |
dann siehts du was zwischen den !...! steht. Ich tippe darauf dass das Einlesen Mist baut, zB keine 0 an das Textende. Werner
> Leerzeichen mit in den String > kommen, die dann den Unterschied zu buf1 ausmachen Das kann schon sein. Heisser Kandidat ist auch immer wieder ein '\n' (also ein Zeilenvorschub) oder ein '\t' (also ein Tabulator) Auf die Spur kannst du dem Kommen, indem du dir mal die Länge des Strings ausgeben lässt ( strlen() ) Was auch immer ein Augenöffner ist, ist die Testausgabe etwas geschickter machen. Du machst printf("%s\n",buf2) Und nur mit extrem guten Augen kannst du sehen, ob da ein Leerzeichen davor oder dahinter ist. Wenn du dir aber ein Sonderzeichen davor und dahinter machst, dann siehst du Leerzeichen: printf("\"%s\"\n",buf2) jetzt siehst du den Unterschied zwischen "out" und "out " oder überhaupt: "out " (Falls es nicht klar ist: im letzen Beispiel ist ein Zeilen- vorschub im String drin. Drum ist das abschliessende " auf einer neuen Zeile).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.