Inhalt eines Arrays überprüfen

Gast #2105959
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
Gast #2105972
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?
Gast #2106040
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
Gast #2106197
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
}

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.