[C] Char-Array?

unregiert

abgemeldet
22 April 2006
451
26
Abend

Ich fange an, C programmieren zu lernen. Nun, das meiste kenne ich ja bereits von PHP, nur verstehe ich nicht, wie ich ein Array in C erstelle, in dem es Wörter gibt.

PHP:
$array = array();
$array[0] = "Haus";

So sähe es in PHP aus. Nun, in C muss man ja die Anzahl der Elemente davor definieren, und dem Array einen Datentyp geben - Aber einfach ein char statt dem im Buch vorgeschriebenem int nehmen?

Code:
int main()
{
    char test[5];
    test[2] = "haus";
    
    printf("%c", test[2]);
}

C-Könner werden die Antwort kennen: Es geht nicht.
Ein Freund sagte mir irgendwann mal etwas von stcpy, aber das ist auch einpaar Monate her.

Wie mache ich das nun :( ?
 
Als PHP-Wechsler wirst du es in C schwer haben ;)

Ein char kann nur ein Byte (also ein Zeichen) speichern. Ein char-Array entspricht also nur einem String, nicht mehreren.

PHP:
char test[5];
strcpy(test,"haus");

// der strcpy()-Aufruf entspricht:
test[0]='h';
test[1]='a';
test[2]='u';
test[3]='s';
test[4]='\0';

// Ausgabe
printf("Nur ein Zeichen: %c\nganzer String: %s",test[2],test);
 
Code:
char* test = "haus";

Ist dann jedoch nicht mehr aenderbar. (entspricht einem const char*)

oder

Code:
char test[] = "haus";

Wo du die einzelnen Stellen aendern kannst, jedoch musst du das char-array bei der Deklaration initialisieren.

Die beiden Varianten funktionieren, weil dir der Compiler die Arbeit abnimmt die Zeichen zu zaehlen und automatisch genug Speicher zum Halten der Zeichen alloziert.

Nur so am Rande, tu dir den Gefallen und lern C++. Ich will hier keine grossartige Diskussion aufwerfen, aber C++ vereinfacht dir in vielerlei Hinsicht die Arbeit, vorallem wenn es um Strings und abstrakte Datentypen wie Listen, ... geht. Wenn du aber auf C beharren willst, leg ich dir dieses Buch ans Herz (komplett kostenlos im Netz).
 
C++ ist besser: Darüber bin ich mir schon im Klaren. Nur habe ich gehört, C++ sei nur so eine "Erweiterung" von C, bei der nebenbei noch einige Sachen geändert wurden.
Aber mein Compiler (gcc @ Anjuta) compilet glaub ich jetzt nur in C++: Ich habe es mit void main() versucht, er gab mir eine Fehlermeldung. Bei Int motze er nicht.
 
Du meinst er compiled nur in C?

"So eine Erweiterung", C++ ist schon eine eigene Sprache, von der C eine Teilmenge ist. void main und int main deuten uebrigens nicht auf C++ hin, nur auf einen unterschiedlichen C-Standard. (Und das ist mit Sicherheit auch nicht das Indiz, woran ich C++ messen wuerde :mrgreen:) Und lass dich von solchen Aussagen nicht verunsichern - wenn du nicht gerade Betriebssysteme, Treiber programmieren willst oder dir gerne die Hose mit der Kneifzange anziehst, nimm Cpp.

Wenn du C++ compilen willst, nimm g++.
 
Welcher Standard schreibt denn void main() vor? ;)

Okay, im Vertrauen auf Sekundaerquellen: Laut ISO-C++ muss es int main lauten, der ISO-C Standard spezifiziert keine absolute Unzulaessigkeit anderer Main-Deklarationen, sondern erlaubt sie.

It shall be defined

  • with a return type of int and
    • with no parameters [...] or
    • with two parameters [...] or equivalent;
  • or
    • in some other implementation-defined manner.

siehe:
https://homepages.tesco.net/J.deBoynePollard/FGA/legality-of-void-main.html