Frage String Literal?
-
Folgends:
char *values[6]={"AAA",BBB,"CCC","DDD","EEE","FFF"};
ist ja ein array aus 6 strinliteralen richig.
d.h. es wäre fatal, wenn ich die string währen der laufzeit anfassen würde?
Stringliterale werden fest hardcodiert im Quellcode bzw. compalierten code eingebettet , richtig?
Wie sieht es dann damit aus
char acText[20]="HALLO";
dies ist ja kein stringliteral, oder doch? ich kann den text anfassen bzw. die zeichen des reservieren array verändern, wobei "HALLO" auch hardcodiert im code eingebunden wird?
-
bin mir nicht sicher, aber du solltest den Text in dem Array zur Laufzeit verändern können.
Dies geschieht dann aber definitiv nur im Arbeitsspeicher.
An der *.exe ändert sich gar nichts,
also beim nächsten Neustart steht wieder der alte Text in dem Array.
-
ja bei
char acText[20]="....";
kannst ich den text zur laufzeit verandern
aber bei
char *acText="....";
nicht ! Soweit mein Wissen :xmas2:
-
BorisDieKlinge schrieb:
aber bei
char *acText="....";
nicht ! Soweit mein Wissen :xmas2:
dh das hier darf dann nicht funktionieren??
#include <stdlib.h> #include <stdio.h> char *szText = "blablabla"; int main(int argc, char **argv) { printf("%s\n", szText); szText = "Hallo"; printf("%s\n", szText); return 0; }
liefert mir als ergebnis:
~$ gcc -Wall -ansi -pedantic sztext.c ~$ ./a.out blablabla Hallo
man sollte nur aufpassen, dass das was man auf die variable schreibt nicht größer ist als was schon drin steht, sonst muss man den speicher neu allocieren
-
Den Zeiger umzubiegen ist kein Problem - du änderst ja nichts am String-Literal selber, sondern verwendest nur ein anderes. Gefährlich wird es nur, wenn du über den (dereferenzierten) Zeiger den String-Inhalt verändern willst (z.B.
szText[0]='H';
oderstrcpy(szText,"Hallo");
)(und selbst da ist es Glückssache, was am Ende herauskommt - mit etwas Pech schluckt das Programm das und du hast irgendwann später falsche Werte)
-
siehste killerkipferl :xmas2:
-
mit str(n)cpy bekomm ich ein seg fault
btw: dein teil ginge ja sowieso net boris...
-
welcher teil ginge nicht?
-
char *acText="....
assignment makes integer from pointer without a cast
-
BorisDieKlinge schrieb:
ja bei
char acText[20]="....";
kannst ich den text zur laufzeit verandern
aber beichar *acText="....";
nicht ! Soweit mein Wissen :xmas2:
bei char text[20] = "...";, wird ein array aus 20 zeichen angelegt. bevor 'main' aufgerufen wird, werden in die ersten paar bytes alle zeichen von "..." kopiert.
bei *text="...."; wird kein array angelegt, dafür aber ein pointer und bevor die 'main' aufgerufen wird, wird diesem pointer eine adresse auf dieses string-literal "..." zugewiesen.
in beiden fällen ist das "..." read-only. im ersten fall aber gibt's ein array und im zeiten 'nur' einen pointer.
-
String-King schrieb:
in beiden fällen ist das "..." read-only. im ersten fall aber gibt's ein array und im zeiten 'nur' einen pointer.
fortsetzung: und das array sowie der pointer sind natürlich veränderbar.
-
alos killerkipferl
mein code geht. erst testen dann nörgeln;)