Det jeg tænker er: hvorfor står der const foran alle dine char*? Jeg er ikke sikker på hvordan det er i c++, men const er normalt en konstant, og kan ikke ændre værdi. Virker det hvis du fjerner const fra alle dine variabler?
(det undrer mig faktisk lidt at det ikke kaster en exception, men du opretter dem selvfølgelig ikke med en værdi, så om man kan sætte værdien bagefter ved jeg faktisk ikke)
--
Gæstebruger, opret dit eget login og få din egen signatur. Jeg er ret sikker på at han har const foran sine char* fordi han kalder det i en define og derfor skal argumentet være const(mener jeg). Som #1 så tænker jeg også at du sætter adressen på en const, hvilket nok godt kan lade sig gøre men fjerner ideen med at det er en const ( da den jo så ændrer sig). Jeg vil også foreslå at du lavede det uden const, da der ikke er nogen direkte grund til at have dem - så må du arbejde dig uden om din define. :)
--
Jeg glemte helt at nævne det er i arduino miljøet jeg programmere, altså embedded.
Jeg undrede mig også selv over det med const, men lod det være da dette er kode jeg blot redigere i, for at få mulighed for at genskabe den sidst sendte besked der er blevet sendt til mit display.
Jeg har dog lidt svært ved at uddybe det nærmere da jeg selv er lidt forvirret :P
--
"Jeg forbeholder mig ret til til tryk fejl"©
"Hvis hjernen ikke kan, kan en hammer" B4Me™
Nu har jeg tænkt lidt mere, og givet at du har deklareret det som du har med:
const char *_lcd_status;
Så er det lovligt at ændre adressen, men ikke værdien(altså indirekte ændre værdien). Jeg tror at den variable der bliver oprettet i din funktion lcd_statuspgm , altså din const char *message kun er lokal i scope, og derfor når du ændrer sin globale variable til at pointe til en lokal variable der forsvinder ved oprydning af funktionen, så vil din globale variable pointe ud i noget tomt (burde dog give compile fejl). Du kan jo evt. prøve at sende adressen i stedet for værdien, eller oprettet en int med adressen. Der er mange muligheder :) Jeg tror du har helt ret i at det er en scope fejl.
Nu er det lidt tid siden jeg har lavet C, men håber jeg hjælper og ikke forvirrer.. :)
--
(og lige for at forklare hvorfor const faktisk kan ændres):
When a value of a ‘const’ variable can be calculated during the compilation, it creates a true constant. References to such constant are replaced with its value whenever it is used. That’s why there is no location in the memory that can be changed to affect all places where it is used. It is like using #define.
When value of a ‘const’ variable cannot be calculated during the compilation, it creates a read-only variable. It has a location in the memory that contains a value but compiler enforces a read-only behavior.
--
Mange tak for svarene, fik løst problemet, dog en helt anden vej omkring, ved at angribe tingene i slutningen istedet for starten, og derved kunne jeg ende ud med blot at kopier en string..
Men det med const.. står der ikke i den tekst du cirterede at den er READ ONLY ? hvordan kan man så ændre den da
--
"Jeg forbeholder mig ret til til tryk fejl"©
"Hvis hjernen ikke kan, kan en hammer" B4Me™