Zwei Arrays miteinander vergleichen

Hallo,

ich würde gerne zwei Arrays miteinander vergleichen und habe zumindest schon einmal das hier gefunden:

http://www.cplusplus.com/reference/cstring/strcmp/

Leider fällt es mir schwer dies auf meine Arrays zu "übertragen".

byte main_LED_st[6] = {
  0,0,0,0,0,0};
  
byte tp_LED_st[6] = {
  0,1,0,3,5,1};

Müsste ich das dann so schreiben?

if(strcmp (*main_LED_st, *tp_LED_st))
{
  Blabla..
}

..und was hat dies im Hinblick auf die oben verlinkte Seite zu bedeuten?

#include <stdio.h>
#include <string.h>

Danke.

Gruß Chris

Es gibt auch memcmp():
http://www.cplusplus.com/reference/cstring/memcmp/

Und memmem() um Teil-Arrays in Arrays zu finden

Schau dir generell mal string.h an:
http://www.cplusplus.com/reference/cstring/
http://www.nongnu.org/avr-libc/user-manual/group__avr__string.html

Letzteres ist was wirklich auf dem Arduino ist und das ist nicht genau das gleiche wie die Standard Lib, aber die wichtigsten Funktionen sind gleich. Und auf der ersten Seite ist es tausend mal besser erklärt.

Wie du da siehst gibt es einige der String Funktionen auch genauso mit Speicher. Der einzige Unterschied ist dass die String Funktionen den Null-Terminator verarbeiten.

Die includes brauchst du in diesem Fall auf dem Arduino nicht. Das übernimmt die IDE für dich im Hintergrund. Das Standard Zeug wie string.h und math.h sind automatisch drin. Mit einer IDE die auto complete hat (z.B. Visual Studio oder Atmel Studio) sieht man das auch.

EDIT:
if(strcmp (*main_LED_st, *tp_LED_st))

Mach den Stern-Operator weg. Du willst das Array, d.h. einen Pointer übergeben. Der Stern dereferenziert die Adresse, so dass du dann den Inhalt der ersten Zelle hast. Das kompiliert auch gar nicht.

Chris72622:
ich würde gerne zwei Arrays miteinander vergleichen und habe zumindest schon einmal das hier gefunden:

Hallo,

das kannst Du memcmp() machen. Ein Beispiel:

byte ar1[] = {0,0,0,0,0,0};
byte ar2[] = {1,2,3,4,5,6};


void setup() {
  Serial.begin(9600);
}


void loop() {
  if(memcmp(ar1, ar2, sizeof(ar1)) == 0)
    Serial.println("Gleich");
  else
    Serial.println("Ungleich");
}

Du übergibst Pointer auf die beiden Arrays und die Länge des Speicherbereichs, der verglichen werden soll. Ergebnis: 0 heißt gleich, nicht 0 heißt ungleich.

Gruß,
Ralf

Könnte ich das z.B. auch so schreiben:

void loop()
{
  if(memcmp(ar1, ar2, sizeof(ar1)))
  Serial.println("Ungleich");
}

Chris72622:
Könnte ich das z.B. auch so schreiben:

Ja.

Gruß,
Ralf

Eine Feinheit, die dir dabei vielleicht nicht klar ist:

Das geht weil 0 = false ist. Und alles ungleich 0 ist true. Die Funktion kann auch negative Werte zurückgeben und durch die Art wie true/false definiert ist, sind diese dann auch true.