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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren