Hallo, Ich lese über die uart einen string ein der sieht so aus, Lcd loeschen=clear der string steht in pname und mein vergleich funktioniert aber nicht. was mache ich falsch mfg
1 | if(!strcmp_P(pname,PSTR("clear")) ) |
2 | {
|
3 | Lcd_clear(): |
4 | }
|
|
Forum: Mikrocontroller und Digitale Elektronik string vergleichenHallo, Ich lese über die uart einen string ein der sieht so aus, Lcd loeschen=clear der string steht in pname und mein vergleich funktioniert aber nicht. was mache ich falsch mfg
Der vergleich funktioniert nicht
>Der vergleich funktioniert nicht >unsigned char pname[] = "Lcd loeschen=clear"; Natürlich funktioniert der nicht. strcmp popelt sich das "clear" nicht aus dem String. Dirk B. schrieb: > strcmp vergleicht den ganzen String. > > Du möchtest evtl. strstr nehmen. Ahh na das kann ja nicht gehn. Ich suche eigentlich eine funktion mit der ich den string vergleichen kann und wenn das clear drin vorkommt dann mach etwas avr stromer schrieb: Ich suche eigentlich eine funktion mit der ich den string vergleichen > kann ... Das macht strcmp. Gleichheit vom Anfang bis Ende. avr stromer schrieb: > ... und wenn das clear drin vorkommt dann mach etwas Du suchst das Vorkommen von einem Teilstring: strstr Andere Möglichkeit: nach dem = suchen und dahinter das strcmp ansetzen. Leider läuft das bei mir nicht mit dem vetgleich. ich hab nun versucht was nach dem = ist auszugeben aber das funktioniert bei beiden Vergleichen nicht. kann mir jemand weitethelfen
Wie gesagt strcmp vergleicht zwei Stings auf absolute Gleichheit, von anfang bis ende. Dein String mit dem du vergleichst ist "Lcd loeschen=clear", du willst aber wissen ob "Lcd loeschen=" darin vorkommt... klar gibt strcmp dort != 0 zurück. Nimm strstr und schau ob != NULL und gut ist. strstr liefert dir den Pointer auf den Anfang des Vergleichstrings den du suchst. Das was nach dem "=" ist bekommst du also mit "strstr(pname, "Lcd loeschen=") + 13" Du kannst auch strncmp (achte auf das n in der Mitte) nehmen. http://www.cplusplus.com/reference/cstring/strncmp/ Wäre das denn so richtig if(strstr(pname,("Lcd loeschen=")+13) { Lcd_print(pname); } Dirk B. schrieb: > Nein. > > Was willst du erreichen? Was, nicht wie. Ich wollte erstmal den string nach dem = ausgeben. zueest müsste ich ja erstmal wissen wie viele zeichen hinter dem = sind? avr stromer schrieb: > Ich wollte erstmal den string nach dem = ausgeben. > > zueest müsste ich ja erstmal wissen wie viele zeichen hinter dem = sind? dann versuche es mal mit strstr und suche das = noch besser du definierst einen (char *) und weisst diesem das strstr(string, "=") zu die Länge nach dem '=' bekommst du mit +1 und strlen avr stromer schrieb: > Ich wollte erstmal den string nach dem = ausgeben. Geht schon in die Richtung "Wie" > zueest müsste ich ja erstmal wissen wie viele zeichen hinter dem = sind? Musst du wirklich? Zum suchen von einem Zeichen ist strchr besser: http://www.cplusplus.com/reference/cstring/strchr/
DirkB schrieb: > avr stromer schrieb: >> Ich wollte erstmal den string nach dem = ausgeben. > Geht schon in die Richtung "Wie" > >> zueest müsste ich ja erstmal wissen wie viele zeichen hinter dem = sind? > Musst du wirklich? > > Zum suchen von einem Zeichen ist strchr besser: > http://www.cplusplus.com/reference/cstring/strchr/ > char *p; > > if ((p=strchr(pname,'=')!=NULL) // ist ein = vorhanden > { Lcd_print(p+1); > } wie kann ich den string hinter dem = ausgeben das bekomm ich nicht hin Das steht in genau der letzten Codezeile vor Deiner Frage. Liest Du eigentlich auch die Antworten, die Dir gegeben werden? Hier geht's ja um Controller. Ich nehm daher an, das soll ein command an einen controller sein. Ich wuerd den Codieren. Falls nicht allzuviele moeglichkeien ausgedrueckt werden sollen, kann man ihn zB als ein paar Bytes ausdruecken. Allenfalls mit einem Protokoll, das nicht auf text beruht. Im Prinzip geht es darum, nicht benoetigte, und sinnlose Redundanz wegzulassen. Denn wenn der String auf Identitaet geprueft wird, kann man ebenso auf "01" pruefen. Ich sehe gerade, dass ich eine Klammer vergessen habe:
avr stromer schrieb: > wie kann ich den string hinter dem = ausgeben das bekomm ich nicht hin Du willst Strings zerlegen und kennst dich nicht mit Zeiger aus? Spiel damit erstmal auf dem PC rum. Da kannst du einfacher ein paar printf einfügen oder mit dem Debugger durchsteppen. 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
Noch kein Account? Hier anmelden.
|
|