Pointer auf char UND const char?

OP #5959553
Lesenswert?
• ▲
▼
Zum wieder reinkommen in die Mikrocontroller-Programmierung bin ich 
dabei für mein MSP430 launchpad mit dem G2553 einen Morsengenerator zu 
schreiben. Das funktioniert bisher ganz gut. Inzwischen kann das 
Programm einen string morsen, der als const char array definiert ist:

const char Sdatum[] =   {"Die Temperatur betraegt "};

Der Zugriff der morseroutine auf den string erfolgt über einen pointer:

const char             *string;         // Pointer auf aktuelles Zeichen 
des zu sendenden strings

Jetzt will ich aber auch einen "variablen String senden, also einen der 
im RAM hinterlegt wird - z.B. weil darin der ASCII-code einer Integer 
hinterlegt ist (Temperatur).

Wenn ich dazu das const weglasse erfolgt bei der Zuweisung der 
Stringadresse in der Senderoutine

string = &Sdatum[0]

die eigentlich erwartete Fehlermeldung:

"../main.c", line 130: warning #515-D: a value of type "const char *" 
cannot be assigned to an entity of type "char *"


Meine Frage:  ist es im MSP430 C++ möglich, einen Ponter zu definieren, 
der sowohl auf einen String im flash-Speicher (const) als auch im RAM 
zeigen kann??
Gast #5959557
Lesenswert?
• ▲
▼
Martin H. schrieb:
> Wenn ich dazu das const weglasse

Mach das doch einfach nicht. Ein "const char*" kann sowohl auf ein 
"const char[]" als auch auf ein "char[]" array zeigen. Mit anderen 
Worten: Ein "char*" Zeiger wird implizit nach "const char*" konvertiert. 
Warum auch nicht - modifizierbare Daten nicht zu modifizieren ist 
erlaubt...
Moderator Persönliche Seite #5959558
Lesenswert?
• ▲
▼
Du kannst doch den Zeiger auf const char * belassen: das bedeutet ja 
nicht, dass du den Zeiger selbst nicht danach inkrementieren darfst 
sondern nur, dass du das, auf was er zeigt, nicht modifizieren darfst.

Außerdem:
1
string = &Sdatum[0];

Das ist lediglich eine außerordentlich umständliche Schreibweise von
1
string = Sdatum;

;-)
OP #5959613
Lesenswert?
• ▲
▼
Ich habe jetzt das "const" sowohl bei der Stringdefinition wie auch beim 
Zeiger weggelassen. Damit gibt es keinen Fehler bei der Zuweisung der 
string-Adresse wie auch bei der Zuweisunge der Adresse eines 
RAM-Buffers:

char Sdatum[] =   {"Die Temperatur betraegt "};
char                    strbuf[4];        //Array zur Pufferung von 
Strings
char                   *string;

string = Sdatum;
string = strbuf;

wird also ohne Fehlermeldung compiliert und scheint wie gewollt zu 
funktionieren.

VIELEN DANK !!
Gast #5959618
Lesenswert?
• ▲
▼
Martin H. schrieb:
> Ich habe jetzt das "const" sowohl bei der Stringdefinition wie auch beim
> Zeiger weggelassen.

Bei der Stringdefinition solltest du es dran lassen, damit du nicht 
unnötig RAM verschwendest!
1
const char Sdatum[] = {"Die Temperatur betraegt "};
2
char strbuf[4];
3
const char *string;
4

5
string = Sdatum;
6
string = strbuf;

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.