unterschied zwischen "char*" und char[n]
-
hallo,
mein VC++ verweigert eine Wertzuweisung eines strings mit folgender meldung:
"can't cast from 'char*' to char[128]"
was ist der unterschied? für mich sind beide gleich!
mein string ist als
char* foo;
definiert, der andere wert kommt aus einer C++ routine von windows.marcello
-
das eine ist ein zeiger, das andere ein array
-
Was genau willst du denn machen? Es gbt sicher eine Lösung.
-
hallo ich will daten kopieren von zwei strings:
//global
TCHAR g_str[128] ={0};
//local
char* m_str;jetzt wird m_str mit daten gefüllt, und soll dann in g_str kopiert werden.
warum geht das net?
ich dachte das g_str auch ein zeiger auf ein feld darstellt, nicht?
g_str = m_str;
dat jet aber net.marcello
-
'char *' ist kein String sondern ein stink normaler Zeiger. Du versuchst aber den String den dieser Zeiger darstellen soll zu kopieren. Selbst wenn es sich bei g_str nicht um ein Feld sondern einen weiteren Zeiger handeln würde (wodurch die Zuweisung erlaubt wäre) würdest du immernoch nicht den String kopieren, sondern lediglich den Wert des Zeigers, also eine Adresse, die zufällig auf den Anfang einer Zeichenkette zeigt.
Felder kannst du meist als kKonstante Zeiger betrachten. Du kannst das Feld nicht einfach auf etwas anderes Zeigen lassen.Eine Lösung, die deiner Denkweise näher käme ist std::string aus <string> zu verwenden.
#include <string>
using namespace std;
int main ()
{
string foo ("Hallo");
string bar;bar = foo; // hier wird wirklich kopiert!
}
-
g_str ist schon ein Zeiger auf ein Feld, aber ein nicht-lvalue-Zeiger (lvalues sind Ausdrücke, die einen Speicherort bezeichnen, der Zeiger auf das Feld wird aber nirgends als Wert gespeichert, sondern einfach immer eingesetzt). Guck dir die Funktion strcpy an.
-
danke Bashar!
ich dachte schon ich wär total blöd.
jetzt gehts.
hab mit strcpy() die sache kopiert.
gibts denn eigentlich keinen weg direkt nen pointer vom array zu bekommen?
z.b. *char[xxx] ?? das sollte doch gehen oder?
ansonsten ist das blöd: ich arbeite lieber mit pointern, da muss man nicht ewig alles redundant rumliegen lassen.marcello