www.mikrocontroller.net

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


Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan P. (form)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Guru (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja,
es will nicht funktionieren...

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

was mache ich nur falsch???

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anfänger schrieb:

> was mache ich nur falsch???

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

Autor: Helfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...
#include <string.h>

// Rückgabe 1 wenn in n Zeichen erster Unterschied gefunden wird
// Rückgabe 0 wenn n Zeichen gleich sind
int vergleiche(const char *d, const char *v, size_t n)
{
  for (size_t i = 0; i < n; i++) {
    if ( *d++ != *v++ ) // oder d[i] != v[i]
      return 1;
  }
  return 0;
}

int main(void)
{
  char verboten[] = "024566669865"; // 12 Zeichen plus 1 Nullbyte
  char daten[12];

  // Hier daten füllen

  // Vergleichen #1...
  // Mit einer selbstgeschriebenen Funktion
  if ( vergleiche(daten, verboten, 12) ) {
    printf("%d Zeichen sind ungleich!\n", 12);
  } else {
    printf("%d Zeichen sind gleich!\n", 12);
  }
  
  // Vergleichen #2...
  // Mit einer Standardfunktion aus string.h
  // http://www.nongnu.org/avr-libc/user-manual/group__avr__string.html
  if ( memcmp(daten, verboten, 12) ) {
    printf("%d Zeichen sind ungleich!\n", 12);
  } else {
    printf("%d Zeichen sind gleich!\n", 12);
  }
}

Autor: Cord (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie findest Du den Code von Helfer?

Autor: Guru (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man ihn ausdruckt, kann man noch Zwiebelschalen in dem Papier 
einpacken.

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.