C String im Char Array ?

Fireball89

Captain
Registriert
Aug. 2007
Beiträge
3.498
Hallo,

bin noch C Anfänger und komme vom streng typisierten Java :D
Hab mich informiert wie man einem C-Programm Parameter übergibt und bin darauf gestossen, dass man Strings als Array-Element im Char-Array benutzen kann.

Code:
int func() {
   char *ar[2];
   ar[1] = "Ich bin ein String!";
   printf("%s\n",ar[1]);
   return 0;
}

Das funktionert problemlos.
Wenn ich allerdings einer Variable mit Typ char einen String zuweisen möchte, gibt's n Fehler.
Dass ein Character-Array als GANZES einen String repräsentiert, war ja noch logisch.
Vielleicht habe ich auch ein falsches Verständnis vom Array. Für mich gibt es in einem Integer-Array nur Integer als einzelne Elemente. Und das gleiche muss doch auch für Character gelten.
Wie muss ich das verstehen?

//edit: Oder verwandelt mein Befehl in Zeile 3 das Array in ein zwei-dimensionales?
 
Zuletzt bearbeitet:
Du kann einer char Variable keinen String zuweisen...
Du kannst das aber wie folgt lösen.
Code:
int func() {
   char *ar[2];
   ar[1] = "Ich bin ein String!";
   printf("%s\n",ar[1]);
   char *str = ar[1];
   printf("%s\n", str);
   return 0;
}

Das hängt mit der Umsetzung von Strings in C zusammen.
Hier solltest du dich am besten genauer einlesen.

Stichworte dazu
-Pointer
-Referenzen
-Aufbau von Arrays(wie werden sie im Speicher realisiert)
-Aufbau der Datentypen(wie werden sie im Speicher realisiert)

Das beste ist hier ein gescheites Buch zum Thema zu kaufen.
 
Ich will ja auch nicht einen String an eine char-Variable binden. Ich würde nur gerne verstehen, warum ich im oberen Beispiel einen String als Element in ein char-Array schreiben kann.
Meine Vermutung in Richtung zweidimensionales Array scheint aber wohl richtig zu sein, da folgender Code ein "i" ausgibt.

Code:
int func() {
   char *ar[2];
   ar[1] = "Ich bin ein String!";
   printf("%c\n",ar[1][5]);
   return 0;
}

Oder lieg ich da falsch?
 
Code:
char a = 'a'; // sollte gehen
char b = "b"; // sollte nicht gehen

Beachte die einfachen und doppelten Anführungszeichen.
 
Du hast ein Komfortfeature entdeckt, offenbar ungewollt :)
Hast es aber richtig erkannt.
Ob das im Standard ist und mit jedem Compiler funktioniert weiß ich gerade aber auch nicht mehr, meine C Zeiten sind schon etwas her. Könnte eigentlich mal wieder ein bisschen was damit machen :D
 
Hallo

Fireball89 schrieb:
Ich würde nur gerne verstehen, warum ich im oberen Beispiel einen String als Element in ein char-Array schreiben kann.
Ein String ist kein Element, in dem Sinne, in dem du das offenbar verstehst. Ein String ist im Wesentlichen eine Aneinanderreihung von einzelnen Zeichen, eine Zeichenkette; in dem Wort steckt char-Array ja schon quasi drin. Ein String-Literal wie "Ich bin ein String!" wird vom Compiler richtigerweise schlicht als ein nullterminiertes char-Array interpretiert.

Fireball89 schrieb:
Meine Vermutung in Richtung zweidimensionales Array scheint aber wohl richtig zu sein, da folgender Code ein "i" ausgibt.
Mit Zweidimensionalität hat ein String erstmal nichts zu tun. Dass ar[1][5] ein 'i' ausgibt liegt daran, dass du auch ein zweidimensionales char-Array erstellt hast (genauer: ein 2-elementiges Array von char-Pointern - in C fallen die Begriffe Array und Pointer aber im Endeffekt zusammen).

Wie Fonce geschrieben hat, funktioniert der Umgang mit Strings in C in der Regel so
Code:
char *str = "Ich bin ein String!";
oder so
Code:
char str[20] = "Ich bin ein String!";

Grüße, df
 
Du kannst bei der Deklaration einem char* eine Zeichenkette zuweisen, weil die Zeichenkette wörtlich im
endgültigen Binary in die Data-Section geschrieben wird. Auf die Stelle zeigt der Zeiger dann automatisch.

Wenn du nach der Deklaration einem char* eine Zeichenkette zuweisen willst, benutze strcpy().
 
okay danke an alle. Das hat meinen Fragen beantworten!
 
Zurück
Oben