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
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?
"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
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
>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?
ja, es will nicht funktionieren... if( strcmp("0000000000", daten) != 0){ . . . } was mache ich nur falsch???
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 | }
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.