String in Pointer laden?
-
Ich haben ein ganz kleines Problem: Ich will den Namen einlesen und das in einer char[30] Variable speichern. diese habe ich aber nun als Pointer, und er motzt jetzt immer dass ich kein char nach *char umwandeln kann. Irgendwie finde ich nirgends die Lösung dazu. Auch casten funzt nicht
int datenEinlesen(CKiosk *Kiosk) { //namen einlesen cout << "Wie ist dein Name? "; cin.get((char)*Kiosk->kSpielerName , 30 ); cout << "\n\n Dein Name ist also " << *Kiosk->kSpielerName; return 0; }
------------
Die Ausgabe:
Wie ist dein Name?
Dein Name ist also HIERKANNICHDENNAMENEINGEBEN
------------Tut mir leid wenn ich so viel frage wegen Pointer. Hab noch nicht viel Erfahrung damit.
-
cin.get((char)*Kiosk->kSpielerName , 30 );
cin.get(Kiosk->kSpielerName , 30 );
-
Danke!
Komisch ist nur, wenn ich es nun ausgebe:
cout << "\n\n Dein Name ist also " << *Kiosk->kSpielerName;
erscheint nur der erste Buchstabe, nicht der ganze String.
-
Ist ja klar wenn kSpielerName auf ein char zeigt ist der Inhalt davon ein einzelnes char....
Lesen, lernen: http://tutorial.schornboeck.net/c_string.htm
-
CorDharel schrieb:
Danke!
Komisch ist nur, wenn ich es nun ausgebe:
cout << "\n\n Dein Name ist also " << *Kiosk->kSpielerName;
erscheint nur der erste Buchstabe, nicht der ganze String.
mach mal das sternchen weg
cout << "\n\n Dein Name ist also " << Kiosk->kSpielerName;
//Edit: Beschäftige dich mal einwenig mit Pointern und C-Style Strings
-
hmm aber es ist doch ein char [30] er müsste doch alles ausgeben
Hab ich ja, und ich habe gelernt, dass wenn man auf den Inhalt eines Pointers zugreifen will, nimmt man den Stern, wenn man aber die Adresse will, nimmt man keinen Stern.
/me ist confused
(jaja ich les ja schon
)
Thx!
-
CorDharel schrieb:
hmm aber es ist doch ein char [30] er müsste doch alles ausgeben
Hab ich ja, und ich habe gelernt, dass wenn man auf den Inhalt eines Pointers zugreifen will, nimmt man den Stern, wenn man aber die Adresse will, nimmt man keinen Stern.
Ist ja auch so, aber nicht bei strings. Bei strings greifst du mit dem * auf den ersten buchstaben zu, aber das ist ja eine Zeichenkette (!) es geht ja nicht um ein einzelnes Zeichen, sondern um ein Array aus Zeichen
MfG
-
wenn man von einem array nur den namen angibt, ist damit die adresse des ersten elements gemeint. beispiel:
char array[] = "hallodoof"; // (1) array, kein pointer, 10 chars --> 9 zeichen und 0 am ende char *a = array; // (2) pointer, zeigt auf erstes element von array char *b = &array; // (3) das gleiche wie (2) aber das & hat keine bedeutung char c = *array; // (4) das erste zeichen von 'array' wird in c gespeichert char d = array[0]; // (5) selbiges wie (4) aber zugriff über index char *e = &array[0]; // adresse des ersten elements ist wieder ein pointer, also wie (2) und (3)
-
net schrieb:
char *b = &array; // (3) das gleiche wie (2) aber das & hat keine bedeutung
Seit wann hat & keine Bedeutung?
-
evilissimo schrieb:
Seit wann hat & keine Bedeutung?
huch? da war ich etwas zu voreilig. in c++ geht's nicht, nur in c, da wird das & nicht gabraucht weil der arrayname ja schon die adresse angibt. da sieht man's: ich bin einfach mehr der c-freak. adresse von adresse gibt's ja gar nicht.
-
Du verhederst dich noch mehr. -.-
& holt auch die adresse von einem pointer, dann wird es halt ein pointer auf einen Pointer ...
Und die verfahrensweise in C und C++ ist und sollte hier die selbe sein.
MfG
-
evilissimo schrieb:
& holt auch die adresse von einem pointer, dann wird es halt ein pointer auf einen Pointer ...
jo, aber ein array ist kein pointer, sondern ein bezeichner, unter dem man einen bestimmten speicherbereich erreichen kann, man kann das einem pointer zuweisen, aber man kann nicht die adresse davon bilden, weil die selber schon eine ist. was du meinst:
int *a; int **b = &a;
ist die adresse von einer pointervariablen (a), aber nicht die adresse von einer adresse. für c ist der speicher eben eindimensional.
-
net schrieb:
evilissimo schrieb:
& holt auch die adresse von einem pointer, dann wird es halt ein pointer auf einen Pointer ...
jo, aber ein array ist kein pointer, sondern ein bezeichner, unter dem man einen bestimmten speicherbereich erreichen kann, man kann das einem pointer zuweisen, aber man kann nicht die adresse davon bilden, weil die selber schon eine ist. was du meinst:
int *a; int **b = &a;
ist die adresse von einer pointervariablen (a), aber nicht die adresse von einer adresse. für c ist der speicher eben eindimensional.
Ich mein viel mehr das hier:
int test[10]; int * test_p1 = test; // Vorallem das -.- int ** test_p2 = &test_p1;
Ich sagte nicht das es ein Pointer ist ich sagte das es sich wie einer verhält.
//Edit: btw "
ist die adresse von einer pointervariablen (a), aber nicht die adresse von einer adresse. für c ist der speicher eben eindimensional." Was ist denn ein Zeiger? Das ist auch nichts anderes als eine Adresse, oder was soll bei dir eine Adresse sein?
-
evilissimo schrieb:
Was ist denn ein Zeiger? Das ist auch nichts anderes als eine Adresse, oder was soll bei dir eine Adresse sein?
ein zeiger ist eine variable, in die man eine beliebige adresse speichern kann. sie hat, wie jede andere variable auch, selbst eine adresse (und die ist, im gegensatz zum inhalt des zeigers, nicht veränderlich).
btw: hehe, es wird einem immer wieder bewusst, warum sprachen wie z.b. java keine zeiger haben. das kann manchmal ganz schön verwirrend sein.
-
Mit es ist eine Adresse meine ich das der Wert eine Adresse repräsentiert, er zeigt ja auch auf etwas.
Mir reicht die Korinthenkackerei jetzt wenn du lust hast kannst du deinen Senf dazu geben aber ich hab keine Lust mehr.
-
Auf jeden Fall funktioniert es jetzt
Das hab ich noch nie gehört dass man mit * auf das erste Zeichen eines Strings zugreift.
Danke schön!