Hallo zusammen, ich sitze an einem Programm in AVR-GCC, das über die serielle Schnitstelle bei bestimmten Befehlen Portpins schalten soll. Der Vergleich kompletter Strings funktioniert, also z.B. folgendes: if (!strcmp_P (stringbuffer, PSTR ("\n\rHallo_alle"))) // funktioniert genauso auch: static char Empfang_test[13] PROGMEM = "\n\rHallo_alle"; if (!strcmp_P (stringbuffer, Empfang_test)) // funktioniert Was nicht funktioniert ist der Vergleich einzelner Zeichen: static char Empfang_test[13] PROGMEM = "\n\rHallo_alle"; if (!strcmp_P (stringbuffer[3], Empfang_test[3])) // funktioniert nicht Das brauche ich z.B. um diesen String auf ein "Hallo" zu testen. Den Test auf ein "Hallo" würde ich dann so realisieren: if (!strcmp_P(stringbuffer[3],Empfang_test[3]) && !strcmp_P(stringbuffer[4],Empfang_test[4])) && .. ) usw. (Mit der Beschreibung auf http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html#gae3a7686c2e207b543be3b402d919761a durschaue ich das Problem noch nicht) Warum funktioniert der Vergleich nicht für einzelne Zeichen in einem String?
Ralle schrieb: > Warum funktioniert der Vergleich nicht für einzelne Zeichen in einem > String? Weil strcmp generell immer bis zu einer abschließenden '\0' vergleicht.
Genial! Vielen Dank rr, memcmp_P löst mein Problem. Vielen Dank Klaus für das Wissen. Das behalte ich mal im Hinterkopf, dann könnte strcmp_P mit einem String mit einer künstlich eingefügten \0 verwendet werden. Das erweist sich als nützlich :)
Du willst einzelne Zeichen vergleichen? Warum dafür strcmp verwenden? Du musst nur die Zeichen der beiden Strings direkt miteinander vergleichen: Statt if (!strcmp_P (stringbuffer[3], Empfang_test[3])) // funktioniert nicht also if (stringbuffer[3] == Empfang_test[3]) Wegen der praktischen AVR-Architektur geht das natürlich so nicht, den Zugriff auf den im Flash gespeicherten String musst Du noch hinzufügen: if (stringbuffer[3] == pgm_read_byte(&Empfang_test[3]))
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.