Forum: Mikrocontroller und Digitale Elektronik Inhalt eines Arrays überprüfen


von Anfänger (Gast)


Lesenswert?

Hallo,
ich möchte gerne den Inhalt eines Arrays überprüfen.
Allerdings klappt das noch nicht so wie ich mir das vorstelle.
Mein Array, char daten[12], will ich gerne auf eine bestimmte 
Zeichenfolge überprüfen. Über eine for-Schleife kopiere ich den Inhalt 
in das Array daten.
Nun will ich sichergehen, dass die einkopierten Daten nicht die 
Zeichenfolge
024566669865 ist. Im Grunde müsste das doch einfacher weise so zu 
bewerkstelligen sein.

    if (daten[] != {"024566669865"})
    {
        .
        .
        .
    }

Klappt allerdings nicht. Muss ich das erst mit Hilfe von itoa() 
umwandeln?
Vielen Dank

von Stefan P. (form)


Lesenswert?


von Anfänger (Gast)


Lesenswert?

hallo,
vielen dank für die schnelle antwort. kann es dabei nicht zu problemen 
kommen, wenn ich den inhalt auf "000000000000" untersuchen will. strcmp 
beendet doch beim asuftreten einer null ihre funktion, oder?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

"0" ungleich '0' ungleich 0

Du solltest dich mal zum Thema Strings, Character und Zahlen etwas 
einlesen...
Ein String "00" sieht im Speicher so aus: '0', '0', '\0'  =  48, 48, 0

von Anfänger (Gast)


Lesenswert?

Nun gur,
ich könnte das auch so bewerkstelligen. Je größer die Werte werden, 
desto höher ist halt auch der Schreibaufwand.

if( !(  (daten[0] == '0' ) &&
  (daten[1] == '0' ) &&
  (daten[2] == '0' ) &&
  (daten[3] == '0' ) &&
  (daten[4] == '0' ) &&
  (daten[5] == '0' ) &&
  (daten[6] == '0' ) &&
  (daten[7] == '0' ) &&
  (daten[8] == '0' ) &&
  (daten[9] == '0' ) ) )

Muss ich mein Array also erst mittels itoa() umwandeln, sodass ich das 
so schreiben kann

         if(daten != "0000000000"){
                .
                .
                .
         }

Gibt es noch ein weitere Möglichkeit, wie die von Stefan beschriebene 
Vorgehensweise?

VG

von Guru (Gast)


Lesenswert?

>Gibt es noch ein weitere Möglichkeit, wie die von Stefan
>beschriebene Vorgehensweise?

Was ist an der auszusetzen?

Deine Frage mit der Null ist ja geklärt. Was gibts sonst noch für 
Bedenken?

von Anfänger (Gast)


Lesenswert?

ja,
es will nicht funktionieren...

if( strcmp("0000000000", daten) != 0){
          .
          .
          .
}

was mache ich nur falsch???

von P. S. (Gast)


Lesenswert?

Anfänger schrieb:

> was mache ich nur falsch???

Du probierst rum, statt ein C-Buch zu lesen.

von Helfer (Gast)


Lesenswert?

strcmp() kannst du nicht benutzen, weil deine Zeichenfolge 13 Zeichen 
hat (12 Ziffern plus Nullbyte) und dein Array daten nur 12 Positionen. 
ABER es gibt eine andere Bibliotheksfunktion die du benutzen kannst ODER 
du schreibst dir den Vergleich selbst...
1
#include <string.h>
2
3
// Rückgabe 1 wenn in n Zeichen erster Unterschied gefunden wird
4
// Rückgabe 0 wenn n Zeichen gleich sind
5
int vergleiche(const char *d, const char *v, size_t n)
6
{
7
  for (size_t i = 0; i < n; i++) {
8
    if ( *d++ != *v++ ) // oder d[i] != v[i]
9
      return 1;
10
  }
11
  return 0;
12
}
13
14
int main(void)
15
{
16
  char verboten[] = "024566669865"; // 12 Zeichen plus 1 Nullbyte
17
  char daten[12];
18
19
  // Hier daten füllen
20
21
  // Vergleichen #1...
22
  // Mit einer selbstgeschriebenen Funktion
23
  if ( vergleiche(daten, verboten, 12) ) {
24
    printf("%d Zeichen sind ungleich!\n", 12);
25
  } else {
26
    printf("%d Zeichen sind gleich!\n", 12);
27
  }
28
  
29
  // Vergleichen #2...
30
  // Mit einer Standardfunktion aus string.h
31
  // http://www.nongnu.org/avr-libc/user-manual/group__avr__string.html
32
  if ( memcmp(daten, verboten, 12) ) {
33
    printf("%d Zeichen sind ungleich!\n", 12);
34
  } else {
35
    printf("%d Zeichen sind gleich!\n", 12);
36
  }
37
}

von Cord (Gast)


Lesenswert?

Wie findest Du den Code von Helfer?

von Guru (Gast)


Lesenswert?

Wenn man ihn ausdruckt, kann man noch Zwiebelschalen in dem Papier 
einpacken.

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.