Char Array - char Vergleich
Hallo zusammen,
ich habe leider ein Problem beim erstellen von Char-Arrays in C, und dem Vergleich von Chars.
Es gibt einfach keine Übereinstimmung.
Es ist bestimmt sehr einfach, aber ich habe schon halb google durch ohne Erfolg
Da ich noch nicht lange mit C programmiere, wäre ich euch dankbar,
wenn ihr mir ein paar gute Seiten mit Tutorials für C-nennen könntet.
Schonmal vielen Dank
Yannick
ich habe leider ein Problem beim erstellen von Char-Arrays in C, und dem Vergleich von Chars.
char zeichen[10];
zeichen[1] = a;
zeichen[2] = b;
zeichen[3] = c;
zeichen[4] = d;
zeichen[5] = e;
zeichen[6] = f;
zeichen[7] = g;
zeichen[8] = h;
zeichen[9] = i;
zeichen[10] = j;
zeichen....
char name;
name = "abc";
//vergleichen
if(name == zeichen[1]+zeichen[2]+zeichen[3])
{
printf("Ready!");
}
Es gibt einfach keine Übereinstimmung.
Es ist bestimmt sehr einfach, aber ich habe schon halb google durch ohne Erfolg
Da ich noch nicht lange mit C programmiere, wäre ich euch dankbar,
wenn ihr mir ein paar gute Seiten mit Tutorials für C-nennen könntet.
Schonmal vielen Dank
Yannick
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 153531
Url: https://administrator.de/forum/char-array-char-vergleich-153531.html
Ausgedruckt am: 23.12.2024 um 10:12 Uhr
6 Kommentare
Neuester Kommentar
Als erstes solltest du die einzelnen Char's so: 'a' in den Array einfügen.
Zweitens fängt ein Array eigendlich mit zeichen an und geht dann bis zeichen[9].
Vielleicht geht es jetzt, kanns hier leider nicht testen.
Deine Abfrage kommt mir komisch vor. Ich habe sowas früher mit nem Pointer gelernt. Aber aus dem Stand kann ich das nicht mehr
Zweitens fängt ein Array eigendlich mit zeichen an und geht dann bis zeichen[9].
Vielleicht geht es jetzt, kanns hier leider nicht testen.
Deine Abfrage kommt mir komisch vor. Ich habe sowas früher mit nem Pointer gelernt. Aber aus dem Stand kann ich das nicht mehr
Hallo Yannick!
anstatt Array
einfacher so
wobei, wie schon erwähnt , bei Offset 0 begonnen wird.
Gruß Dieter
anstatt Array
char zeichen = { 'A', 'B', 'C', ...}; |
char zeichen = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; |
Gruß Dieter
In C gibt es keine Strings.
Das ist eine ganz wichtige Regeln.
Ein String in C ist ein Array aus einzelnen Zeichen, dessen letzter Index ein
Ein Zeichen selbst ist eine Zahl, die erst über eine Zeichentabelle bei der Ausgabe in einen Buchstaben aufgelöst wird.
Die Variable eines Strings in C ist der Pointer auf den Speicherort des ersten Buchstabens.
Entsprechend hast du hier folgendes versucht:
und ein if(0) ist per Definition
Wenn du zwei Strings in C vergleichen willst, dann über die
Dazu müssen es aber Null-terminierte Strings und keine Char-Arrays sein.
Einfach und C sind übrigens 2 Sachen, die sich eigentlich ausschließen
Das ist eine ganz wichtige Regeln.
Ein String in C ist ein Array aus einzelnen Zeichen, dessen letzter Index ein
NUL
ist.Ein Zeichen selbst ist eine Zahl, die erst über eine Zeichentabelle bei der Ausgabe in einen Buchstaben aufgelöst wird.
Die Variable eines Strings in C ist der Pointer auf den Speicherort des ersten Buchstabens.
Entsprechend hast du hier folgendes versucht:
char name = "abc";
#< name ist jetzt bspw. 0x1
if(name == zeichen[1]+zeichen[2]+zeichen[3])
#entspricht
if(0x1 == (97+98+99))
#entspricht
if(1 == 294)
#entspricht
if(0)
und ein if(0) ist per Definition
false
.Wenn du zwei Strings in C vergleichen willst, dann über die
strcmp
-Funktion.Dazu müssen es aber Null-terminierte Strings und keine Char-Arrays sein.
Einfach und C sind übrigens 2 Sachen, die sich eigentlich ausschließen
Hallo Yannick!
Also, mit:
wird nur Speicherplatz für ein Zeichen bereitgestellt. Von daher solltest Du für "name" die gleiche Methode, wie in Codezeile 10 (char name = "abc..") anwenden.
Und für:
wird auch nur Speicherplatz für ein Zeichen bereitgestellt.
Da "zeichenkette" aber hier als Buffer verwendet wird, kannst Du hier Speicherplatz so reservieren
Das reicht für 19 Zeichen und ein EndOfString (NullTerminiert)).
Und immer darauf achten, das der Buffer groß genug ist, um alle Zeichen aufzunehmen. Ansonsten würde dies unliebsame Nebeneffekte auslösen z.B. andere Variablen oder eine Rücksprungadresse (Return) zu einer Prozedur überschreiben usw.
Hoffe, ich hab's halbwegs verständlich formuliert?
Gruß Dieter
Also, mit:
char name; |
Und für:
char zeichenkette |
Da "zeichenkette" aber hier als Buffer verwendet wird, kannst Du hier Speicherplatz so reservieren
char zeichenkette[20]; |
Und immer darauf achten, das der Buffer groß genug ist, um alle Zeichen aufzunehmen. Ansonsten würde dies unliebsame Nebeneffekte auslösen z.B. andere Variablen oder eine Rücksprungadresse (Return) zu einer Prozedur überschreiben usw.
Hoffe, ich hab's halbwegs verständlich formuliert?
Gruß Dieter