Pointer auf gespeicherte Adresse

OP #3976758
Lesenswert?
• ▲
▼
Hallo zusammen...

Folgendes szenario:

Ich muss Text unterschiedlicher Länge abspeichern zur Laufzeit.
Dazu reserviere ich Speicher mit malloc.
Diese Adresse speichere ich ab.

Dannach möchte ich meinen Text dorthin kopieren.
1
info->btn_text_addr = malloc((strlen(ButtonText) + 1) *sizeof(char));
2

3
strcpy( info->btn_text_addr ????  ,ButtonText );

Nun das Problem.
strcpy möchte einen Pointer auf das erste Element des Textes.
Ich habe jedoch nur die Adresse als "Klartext"

Wie kann ich hier nun einen Pointer erstellen ohne dieses hier:
1
char *Zeiger;
2
Zeiger = info->btn_text_addr;

Geht das direkt in einer Zeile?
Wie zb.
1
info->btn_text_addr*
 oder so?
OP #3976775
Lesenswert?
• ▲
▼
Peter II schrieb:
> Claudio H. schrieb:
>> Nun das Problem.
>> strcpy möchte einen Pointer auf das erste Element des Textes.
>
> dein Pointer zeigt doch auf die 1.freie stelle.
> strcpy( info->btn_text_addr,ButtonText );
>
> wenn das nicht geht, dann bitte die genaue Fehlermeldung posten.

Ich sehe hier das Problem in folgendem:
1
char *Zeiger;
2

3
//Zeiger ist ein Pointer. Dies erwartet strcpy.
4

5
//Strcpy wird ziemlich sicher folgendes tun: 
6

7
&Zeiger; //Damit bekommt es die Adresse im Speicher wo es die Daten ablegen muss. 
8

9
//Ich habe jedoch schon die Adresse.
10
//Wenn strcpy nun folgendes macht: 
11

12
&info->btn_text_addr;
13

14
//Dann erhält es die Adresse an welcher die Variable btn_text_addr liegt
15
//Es soll jedoch einfach direkt von hier:
16
info->btn_text_addr;
17

18
//Beginnen zu schreiben.
OP #3976788
Lesenswert?
• ▲
▼
Peter II schrieb:
> Claudio H. schrieb:
>> &Zeiger; //Damit bekommt es die Adresse im Speicher wo es die Daten
>> ablegen muss.
>
> nein, damit bekommt du die Adresse vom Pointer.
>
>> btn_text_addr ist uint32_t.
> warum willst du dann einen text dort reinschreiben?

Ich möchte nicht den text in btn_text_addr schreiben
Der text soll an die Stelle, die mir malloc angibt geschrieben werden.
malloc gibt mir eine Adresse zurück.

Diese möchte ich abspeichern, damit ich später wieder weiss wo mein text 
liegt und
ich möchte strcpy mitteilen, es soll den text dorthin kopieren....
OP #3976795
Lesenswert?
• ▲
▼
Sebastian V. O. schrieb:
> Für Addressen gibt es extra einen Datentyp in C also sollte man den auch
> nutzen. In deinem Fall als char* Weil du eine Addresse/Pointer auf ein
> char hast.

Wie gross ist dann in diesem fall

btn_a

Peter II schrieb:
> Claudio H. schrieb:
>> Ich möchte nicht den text in btn_text_addr schreiben
>> Der text soll an die Stelle, die mir malloc angibt geschrieben werden.
>> malloc gibt mir eine Adresse zurück.
>
> dann mach doch erst mal aus
>
> btn_text_addr ein char*
>
> dann passt das auch.

Danke! Hat geklappt!
Gast #3976798
Lesenswert?
• ▲
▼
Claudio H. schrieb:
> Sebastian V. O. schrieb:
>> Für Addressen gibt es extra einen Datentyp in C also sollte man den auch
>> nutzen. In deinem Fall als char* Weil du eine Addresse/Pointer auf ein
>> char hast.
>
> Wie gross ist dann in diesem fall

der Pointer ist auf 32bit Systemen 32bit groß, wohin er zeigt 
entscheidest du doch mit malloc wie viel Platz dort ist.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.