initialisierung eines char[] feldes
-
Hallo zusammen,
ich habe eine Klasse mit einem Feld
char name[25]dieser soll nun im Konstruktor befüllt werden. Der Aufruf ist vorgegeben, und sieht so aus:
Konto k("Mirko")Wie muss der Konstruktor aussehen? Ich habe es unter anderem so probiert:
Konto(char[] n) { name = n; }Anscheinend ist char[] als Typ falsch. Ich habe über google leider keine sinnvolle Hilfe gefunden, deswegen die Frage an euch.
Bin über jeden Hinweis dankbar.

-
1. Du willst std::string.
2. Es heißt Array.
-
http://translate.google.com/#en|de|array

Falls du std::string nicht benutzen darfst, willst du strcpy/strncpy.
-
314159265358979 schrieb:
2. Es heißt Array.
Und das heißt im IT-Kontext übersetzt was?
-
i like trains
-
hallo und vielen Dank für eure Antworten.
Ich kann es immer noch nicht richtig umsetzen.Konto(char[] n) { name = strcpy(n); }das funktioniert nicht richtig. Ist es korrekt, dass
char[] nim Konstruktor steht?
-
1. Funktioniert nicht richtig ist keine Fehlerbeschreibung.
Lies dir doch mal die Doku zu strcpy durch, dann siehst du schon, dass die Funktion zwei Parameter will. Und wenn du dann noch nen Satz liest, siehst du auch noch wofür die Parameter sind.CMAN schrieb:
Ist es korrekt, dass
char[] nim Konstruktor steht?
Jain. Es funktioniert. Aber Arrays kann man nicht kopieren, daher wird das zu char* n aufgelöst. Du willst das was hinter n steht (n ist ja ein Zeiger) nicht verändern, daher const char* n, das wäre korrekt. (Oder halt std::string)
-
#include <string> class Konto { private: std::string name; public: Konto(std::string const& name) : name(name) {} }; int main() { Konto k("Mirko"); }
-
Es muss
char n[]heißen, was allerdings (bei Parametern) äquivalent zu
char* nist.
-
CMAN schrieb:
ich habe eine Klasse mit einem Feld
char name[25]Ist das auch so vorgegeben oder darfst Du auch std::string als Typ für name verwenden? Das würde nämlich einiges einfacher machen.
CMAN schrieb:
dieser soll nun im Konstruktor befüllt werden. Der Aufruf ist vorgegeben, und sieht so aus:
Konto k("Mirko")Wie muss der Konstruktor aussehen? Ich habe es unter anderem so probiert:
Konto(char[] n) { name = n; }Anscheinend ist char[] als Typ falsch.
Ja, da ist so einiges falsch. Und "probieren" ist bei deinem Wissensstand auch nicht wirklich zielführend. Da gibt es einfach zu viele Missverständnisse bei Dir.
#include <string> class Klasse { std::string name; public: explicit Klasse(char const* n); }; Klasse::Klasse(char const* n) : name(n) {}oder so:
class Klasse { char name[25]; public: explicit Klasse(char const* n); }; #include <cassert> #include <cstring> #include <algorithm> void copy_c_string_into_array(char const* psz, char* array, int N) { assert(N>0); int len = std::strlen(psz); if (len>=N) len = N-1; std::copy(psz,psz+len,array); array[len] = 0; } template<int N> inline void copy_c_string_into_array(char const* psz, char (&array)[N]) { copy_c_string_into_array(psz,array,N); } Klasse::Klasse(char const* n) { copy_c_string_into_array(n,name); }(alles ungetestet!)