Char arrays über pointer übergeben
-
christian.sax schrieb:
firstName = m_firstName; lastName = m_lastName;Das geht so nicht. Um c-strings zu kopieren benötigst du z.B. die Funktion strcpy(char* to, const char* from);
In deinem Fall:
strcpy(firstName, m_firstName); strcpy(lastName, m_lastName);Caipi
-
Hmm,
denke, das liegt daran, dass du die Größe des Arrays mitchar firstName[100]; char lastName[100];fest auf 100 Elemente festgelegt hast. Als Parameter wird aber nur ein char-Zeiger übergeben, der ja nicht zu einem Array mit 100 Elementen gehören muss.
Versuch doch mal stattdessenchar *firstName; char *lastName;Die Speicherverwaltung muss dann natürlich dynamisch erfolgen (mit new und delete).
Gruß,
Morph
-
Caipi schrieb:
christian.sax schrieb:
firstName = m_firstName; lastName = m_lastName;Das geht so nicht. Um c-strings zu kopieren benötigst du z.B. die Funktion strcpy(char* to const char* from);
CaipiOh, ja das natürlich sowieso.
-
Erstmal, wenn MFC-Stil dann richtig. Die Variablen der Klasse kriegen das m_ vorangestellt.
firstName = lastName = "\0"; oder = "";
Keine Ahnung, bei mir gehts wenns pointer sind.
Für das was du vorhast ist strcpy da.
edit: Ich bin zu langsam

-
@Caipi
Aber wenn ich doch ein char Array habe und folgendes mache:char firstName[100] = "Hallo Welt"; cout << firstnamedann wird ja das ganze array angezeigt, also "Hallo Welt" und da die Zuweisung ja auch komplett statt finden kann, dachte ich die sollte so möglich sein.
Wenn ich also keine vorhandenen klassen verwenden möchte bleibt mir also nichts übrig als das kopieren folgendermassen zu realisieren:
for(int i=0;i>100;i++) { firstName[i] = m_firstName[i]; }müsste dann so funktionieren oder?
-
christian.sax schrieb:
for(int i=0;i>100;i++) { firstName[i] = m_firstName[i]; }müsste dann so funktionieren oder?
würde ich nicht versuchen. könnte ja sein dass m_firstName keine 100 zeichen lang ist und dann greifst du auf speicher zu der dir nicht gehört.
strcpy oder strncpy ist die einzige lösung. besser ist natürlich du verwendest std::string dan funktioniert auch die zuweisung;
Kurt
-
christian.sax schrieb:
Aber wenn ich doch ein char Array habe und folgendes mache:
char firstName[100] = "Hallo Welt"; cout << firstnamedas ist keine zuweisung sondern du initialisierst eine konstante.
Kurt
-
@ZuK
Ok, gutes Argument... daher folgender Schleifefor(int i=0;(i<100) && (m_firstName[i]!="\0");i++)das coole daran ist, dass der Borland Compiler das anstandslos erledigt.. nicht so visual studio der mekert:
d:\Daten\Visual Studio Projects\DoppeltVerketteteListe\DoppeltVerketteteListe\ElementCode.cpp(25): error C2446: '!=' : no conversion from 'const char *' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style castWo liegt denn hier das Problem? ich vergleiche doch gar nicht mit einem int!!??
-
"\0" ist auch falsch sollte '\0' sein.
BTW was hast du gegen strncpy ?
Kurt
edit: wenn du es selbst machen willst dann fehlt dir '\0' im dest-string wenn der src-string länger als 100 zeichen ist.
-
das ist keine zuweisung sondern du initialisierst eine konstante.
KurtÄhmmm, ja, ich initialisiere eine konstante, welche ich anschliessend dem firstName[100] zuweise... von rechts nach links..
-
sorry, tipp fehler

ich habe nix gegen strcpy
, nur möchte ich das ganze ohne vorhandenen möglichkeiten machen können. Zumal ich leider an den Prüfungen auch keine String operationen verwenden darf 
-
christian.sax schrieb:
das ist keine zuweisung sondern du initialisierst eine konstante.
KurtÄhmmm, ja, ich initialisiere eine konstante, welche ich anschliessend dem firstName[100] zuweise... von rechts nach links..
nee für den compiler heist das reserviere ein char array der länge 100 und initialisiere mit einer konstanten. keine zuweisung.
Kurt
-
christian.sax schrieb:
Zitat:
das ist keine zuweisung sondern du initialisierst eine konstante.
KurtÄhmmm, ja, ich initialisiere eine konstante, welche ich anschliessend dem firstName[100] zuweise... von rechts nach links..
nee für den compiler heist das reserviere ein char array der länge 100 und initialisiere mit einer konstanten. keine zuweisung.
Kurtok, dann wird das wohl schon so sein...
Habe hier aber doch noch ein Problem:firstName = lastName = "Hallo Welt";funzt nicht,
'=' : cannot convert from 'const char [11]' to 'char [100]'
char sind echt lästig...
-
christian.sax schrieb:
Habe hier aber doch noch ein Problem:
firstName = lastName = "Hallo Welt";funzt nicht,
'=' : cannot convert from 'const char [11]' to 'char [100]'
char sind echt lästig...ok jetzt ist es keine initialisierung mehr sondern eine unzulässige zuweisung.
Kurt
-
ok jetzt ist es keine initialisierung mehr sondern eine unzulässige zuweisung.
KurtUnd wie müsste die Anweisung korrekt lauten?
firstName = "Hallo Welt";funz nämlich auch nicht... gleicher Fehler.. in VS
-
char lastName[100]; // eine declaration char firstName[100] = "Hallo Welt"; // initialisierung strcpy(lastName, firstName); // zuweisung geht nicht also kopieren.natürlich kannst du auch beide variablen initialisieren
char lastName[100] = "Hallo Welt"; char firstName[100] = "Hallo Welt";Kurt
-
class CElement { friend class CList; private: CElement *p_Next; CElement *p_Previous; char firstName[100]; char lastName[100]; int age; public: CElement(); CElement(char *m_firstName, char *m_lastName, int m_age); };initialisieren möchte ich das array aber erst im Kontruktor
CElement::CElement() { p_Next = p_Previous = NULL; firstName = "Hallo Welt"; age = 0; }und das funzt so nicht müsste also wieder mit strcpy arbeiten oder
-
und das funzt so nicht müsste also wieder mit strcpy arbeiten oder
Was hast du eigentlich gegen strcpy?
Wenn du keine vorgefertigten Sachen verwenden willst (die meistens sicherer sind, da oft getestet), kannst du auch deine eigene strcpy()-Funktion schreiben:Diese tut nämlich nicht viel mehr als z.B.
void my_strcpy(char* to, const char* from) { while((*to++ = *from++) != '\0') ; }(Wobei diese Funktion im Gegensatz zur Standard-Funktion strcpy() _keinen_ char* auf to zurückgibt...)
Caipi