www.mikrocontroller.net

Forum: Compiler & IDEs String Vergleich


Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

versuche mich gerade mit der Kommunikation eines AVR`s und einem ELM320
OBDII Interpreter. Nun möchte ich zur Fehlerauswertung testen, ob in der
empfangenen Zeichenkette eine andere Zeichenkette vorkommt.

z.B. Empfangsbuffer = "0100BUS ERROR>"/n

Nun möchte ich testen, ob "BUS ERROR" im Empfangsbuffer steht.

Habe mir die Funktionen strcmp(), strstr(), strncmp() angeschaut. Werde
aber daraus nicht so recht schlau daraus. Hat jemand mal einen Tip?

Mfg Sascha

Autor: ElMachel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

in diesem Fall solltest du die Funktion strstr() verwenden,
da du ja einen Teilstring in einem String suchst.

Bsp:
empfbuf = "0100BUS ERROR";
char *bla;
if ( (bla = strstr(empfbuf,"BUS ERROR")) != NULL)
{
    /* String gefunden */
} else {
    /* String nicht gefunden */
}

mfg Christian

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf die Variable bla kann auch verzichtet werden:

  empfbuf = "0100BUS ERROR";

  if (strstr(empfbuf,"BUS ERROR"))
  {
    /* String gefunden */
  } else {
    /* String nicht gefunden */

... aber das ist nur eine stilistische Unterscheidung

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Danke.

Jetzt funktioniert es endlich. Aber jetzt die nächste Frage.
Wie mache ich den Vergleich, wenn der zu vergleichende Text-String im
Flash liegt? Wie in diesem Fall "BUS ERROR". Der ELM hat verschiedene
Fehlermeldungen, da sind die Strings im Ram ziemliche
Platzverschwendung.

Mfg Sascha

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
strstr kann Strings aus dem ROM nicht direkt verarbeiten. Kopier also
zuerst den String mit strcpy_P in einen temporären RAM-Puffer; dann
kannst du mit strstr auf den Substring testen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.