Label1->Caption über Pointer beschreiben
-
Ich will AnsiString der Komponente Label1->Caption direkt vom Speicher
über Pointer beschreiben. Ich benutze C++ Builder.
Beispiel:char p[100];
strcpy(p,“Test”);Label1->Caption.sprintf("Test %s ",p); //So etwas bringt keinen Erfolg:
Bitte um Vorschläge!!!!
-
Ich kann Deinen Ausführungen nicht ganz folgen. Um einen (temporären!) char* aus einem AnsiString zu erhalten, gibt es die Methode AnsiString::c_str(). Beschreiben kannst Du den AnsiString darüber allerdings nicht.
Oder meinst Du das:
Label1->Caption = AnsiString(p);
-
Hallo,
Label1->Caption = "Test"; char p[100]; strcpy(p,"Test"); Label1->Caption = p;[edit]Zu spät.

Übrigens, es gibt hier noch mehr Möglichkeiten.[edit]
-
Hallo,
wenn es sprintf sein muss, hätte ich es so gemacht
char p[100]; strcpy(p,"Test"); Label1->Caption = Label1->Caption.sprintf("Out: %s",p);Gruß
Markus
-
[quote="Braunstein"]Hallo,
Label1->Caption = p;[/cpp]
Leider Fehler:
[C++ Fehler] Unit1.cpp(78): E2034 Konvertierung von 'unsigned char *' nach 'AnsiString' nicht möglich
-
Du verwendest ja auch anscheinend einen "unsigned char" statt "char"-Puffer.
-
AnsiString hat keinen Konstruktor für unsigned char*. Du mußt deinen Pointer noch konvertieren. Entweder per Cast oder indem du deine unsigned char* Variable vorher in eine char* Variable kopierst.
In deinem Beispiel war es signed char*.
-
Braunstein schrieb:
AnsiString hat keinen Konstruktor für unsigned char*. Du mußt deinen Pointer noch konvertieren. Entweder per Cast oder indem du deine unsigned char* Variable vorher in eine char* Variable kopierst.
In deinem Beispiel war es signed char*.skorpionx
-
Was hilft nicht? Bitte gewöhne dir bessere Fehlerbeschreibungen an.
Ich hatte doch gesagt, was du machen mußt. Warum nimmst du überhaupt ein unsigned char* als Puffer?
Ansonstenunsigned char p[100]; strcpy(p,"Test"); Label1->Caption = reinterpret_cast<char*>(p);[edit]und bitte mach keine Doppelposts [edit]
-
char p[100];
strcpy(p,"Test");
Label1->Caption = p;[/cpp]Danke!.
Nur warum das mit der Formatierung(sprintf...) (kein Fehler bei der Übersetzung)nicht funktioniert ?
skorpionx
-
Hallo
Weil die Eigenschaft Caption eine (nicht konstante) Kopie des Original-Wertes im Control zurückgibt. Jede Operation darauf ist nur temporär, wenn sie nicht danach manuell wieder der Eigenschaft zugewiesen wird.
Wie es trotzdem geht zeigt HMarkus82 in seinem Post/Edit : Drei Post mit fast dem gleichen Inhalt...

bis bald
akari
-
Weil Du nur einen temporären String erzeugt hast, den Du nirgendwo zugewiesen hast. Aber auch dafür wurde schon eine Antwort gegeben:
HMarkus82 schrieb:
char p[100]; strcpy(p,"Test"); Label1->Caption = Label1->Caption.sprintf("Out: %s",p);
-
Du meinst das hier?
Label1->Caption.sprintf("Test %s ",p); //So etwas bringt keinen Erfolg:Das funktioniert deswegen nicht, weil Caption keine Membervariable von TLabel ist, sondern eine Property. Das bedeutet, das hier evtl. eine Zugriffsfunktion (read/write) aufgerufen wird. Die würde dir in deinem Fall einen temporären AnsiString erzeugen, in welchen dann geschrieben wird. Die eigentliche Caption bleibt unverändert.
Folgendes dagegen würde funktionieren.AnsiString tstr; tstr.sprintf("Test %s ",p); Label1->Caption = tstr;