Konvertierung von 'char ' nach 'char' nicht möglich
-
Hallo zusammen,
ich habe eben nochmals den Datentyp char wiederholt und bin auf ein Problem gestoßen, das ich nur mit eurer Hilfe lösen kann.
Ich möchte ein Array erstellen und dann jedem Element den Buchstaben "a" zuweisen. Dabei gab es allerdings Schwierigkeiten mit der Konvertiertung (ich weiß, dass das Anfängerkram ist ;))So sieht der Quelltext aus:
char array[101]; for (int i=0; i<102; i++) { array[i]="a"; //Fehler } ShowMessage(array[17]);
1.) Ich dachte, dass ich einem Char-Array nur maximal 100 Elemente zuweisen darf. Ist das wahr??, da hier der Compiler nicht meckert?
2.) In der Zeile mit dem Fehler erscheint die Meldung, dass die Konvertierung von 'char *' nach 'char' nicht möglich sei. Wie mache ich eine solche Konvertierung?
3.) Ich habe mal aus reinem Spaß folgendes geschrieben:
char array[101]; for (int i=0; i<102; i++) { array[i]=char("a"); //kein Fehler } ShowMessage(array[17]);
Hier erscheint kein Fehler, doch erscheint das Copyrightzeichen (also scheinbar etwas Willkürliches). Was habe ich hier unbewusst gemacht bzw. was ist hier anders?
Könnt ihr mir helfen?
Vielen Dank für eure Hilfe
lg, freakC++PS.: Ich bin mir sicher, dass ich vor allem zur ersten Frage etwas in Google finden würde, doch da ich gerade in den Ferien bin und kein richtiges Internet zur Verfügung habe,
würde ich mich freuen, wenn ihr mir dennoch helft!!!
-
Hallo
1.) Ich dachte, dass ich einem Char-Array nur maximal 100 Elemente zuweisen darf. Ist das wahr??, da hier der Compiler nicht meckert?
Nein ein Array kann weit mehr als 100 Elemente aufnehmen. Die Grenze ist nur durch den vorhandenen Speicher vorgegeben (und damit nicht als eine feste, absolute Zahl festlegbar). Da du aber ein lokales statisches Array anlegst, wird der Stack als Speicher benutzt, damit kann dein Array je nach Compilereinstellung ein paar tausend bis ein paar hunderttausend char-Elemente umfassen. Für mehr must du im Heap arbeiten (mit new[] und delete[]).
2.) In der Zeile mit dem Fehler erscheint die Meldung, dass die Konvertierung von 'char *' nach 'char' nicht möglich sei. Wie mache ich eine solche Konvertierung?
array[i]='a'; //Richtig
3.) Ich habe mal aus reinem Spaß folgendes geschrieben:
Ist zwar legaler Code, aber auch recht sinnfrei. Du erstellst ein konstantes String-Literal ("a"), und wandelst desen Speicheradresse (nicht den Inhalt!) in ein char um. Das da das Copyright-Zeichen erscheint ist Zufall, kann auch jedes anderes Zeichen sein.
bis bald
akari
-
Hallo,
vielen Dank für deine Antwort, akari. Warum kann ich denn hier keine Anführungsstriche benutzen? Ist das beim Typ char immer so?Vielen Dank
lg, freakC++
-
freakC++ schrieb:
Warum kann ich denn hier keine Anführungsstriche benutzen? Ist das beim Typ char immer so?
Ja. Ein Char wird nun mal durch die einfachen Anführungszeichen beschrieben. Doppelte Anführungszeichen beschreiben immer eine Zeichenkette (Array von chars, oder im weitesten Sinne auch String). Im Grunde ist char auch nur ein Ganzzahlentyp, mit 'A' beispielsweise weist du letztendlich nur an, dass der char-Variable der Wert 65 zugewiesen wird(man könnte auch 65 schreiben).
-
in dem Code ist auch noch ein Fehler. Du machst einen Schleifendurchlauf zuviel. Dein Array geht nur von 0 - 100 und nicht bis 101. Im schlimmsten Fall stürzt dein Programm durch das 102ste a ab.
greetz KN4CK3R