Array vom Typ Char



  • Hi, ich habe eine Frage zum o.g. Thema.
    Ich will ein Array vom Typ Char erstellen was Name verwaltet.
    Ein Array z.B. cName [5] kann aber nur je einen Buschstaben speichern.
    Wie schaffe ich es nun aber den ganzen Namen zu zuzuweisen?
    Ich hatte die variante gelesen das Array so zu definieren cName[5][20];

    somit könnte man 5 namen mit bis zu 20 Buchstaben zuweisen.
    Ist das ne prkatikable lösung oder gibt es da noch was eleganteres...??

    Mfg

    Toni



  • Ja, das ist eine korrekte Lösung und nennt sich zweidimensionales Array. Das könntest du dann z.B. so machen:

    char sName[5][20];
    strcpy(sName[0],"Hubert");
    strcpy(sName[1],"Rgne");
    //...
    

    Achte darauf, dass du nicht über Feldgrenzen hinaus schreibst. Solchen Arrays kannst du übrigens auch eine dynamische Größe mit Funktionen wie malloc, realloc oder calloc zuweisen, aber das nur am Rande.

    In C++ hättest du weitere Möglichkeiten wie die Klasse std::string...



  • Danke erstmal für die antwort.

    Ich habe in einem Beispielprogramm gesehen das bei einem solchen Array aber nur die Zeilen angesprochen werden.

    quasi: cName [a]

    Die Spalten (der zweite []klammerausdruck) wird dann ignoriert.
    Wird das dann von alleine zugewiesen? oder wie kann man sich das vorstellen?

    Mfg
    Toni



  • Kommt darauf an, wie du das meinst. Im Beispiel habe ich ja mit strcpy nur die "Zeilen" angesprochen. Eine Zuweisung der Marke

    sName[0]="Otto";
    

    kannst du nicht machen.

    Wenn du das weiterverwenden mit z.B. printf meinst, das geht dann schon so:

    printf(sName[0]);
    

    Wenn das deine Frage nicht abdeckt, werde konreter.



  • Als Beispiel will ich eine kleine Datenbank machen.
    In der Vornamen und alter von Personen gespeichert sind.
    Diese sollen dann geordnet (alphabetisch oder Alter9 ausgegeben werden über printf.

    Da soll es hingehen.

    char cName [5] [20] // kann 5 Namen aufnehmen mit bis zu 20 Buchstaben

    Wenn ich die Namen in ner Schleife ausgeben will (sozusagen ne list anzeigen)
    verwende ich aber nur noch

    cName [a] // a laufvariable der for schleife
    Es wird dann nur noch der erste Block angesprochen (die zeile)
    Der zweite block taucht dann nicht wieder auf.

    Scheint darher automatisch die Buchstaben auf die Spalten zuzuweisen...?
    Ich bin sicher das es so geht aber, irgendwie fehlt mir das verständnis dazu.



  • _matze schrieb:

    In C++ hättest du weitere Möglichkeiten wie die Klasse std::string...

    naja, ich würde nicht unbedingt zu c++ raten. es gibt viele sprachen und systeme, die besser mit strings umgehen können als C und C++. auch gleich mit eingebauter lokalisierung, unicode-unterstützung, etc. wenn man's denn braucht. aber wenn man bei c bleiben will/muss, und trotzdem viel mit strings machen will, dann gibts ja noch zusatz-libraries: http://www.and.org/vstr/comparison
    🙂



  • Das war ja keine Empfehlung, nur eine Erwähnung. 😉

    Ich sag dir ganz ehrlich, wir haben hier sowieso viele C-Projekte, so dass ich sowieso meist char-Arrays benutze. Und ich kann daran auch nichts Schlimmes finden. Klappt doch wunderbar! Und wenn ich in C++ mal eine String-Klasse benutzen will, dann nehme ich CString, die gefällt mir besser...


Anmelden zum Antworten