Archiv diskusního fóra o matematice, 2006–2026
Dobrý deň,
chcel by som sa spýtať, prečo:
const char* text = "text"; //toto funguje char* text2 = "text2"; //toto hlási chybu
Ďakujem.
Offline

Jakou chybu? Run-time nebo warning při překladu? (mělo by nastat obojí :-))
Problém je, že druhý příklad vytvoří řetězec "text2\0" uložený "kdesi v datech", jehož adresa je použitá jako počáteční hodnota proměnné text2. Následné problémy jsou asi zřejmé (ale při troše opatrnosti by se s tím dalo vyžít). V prvním případě vznikne konstantní pointer, neměnitelný a všechno je ok.
Offline

Tak s tím už neporadím, VS ani nemám. Zkus stackoverflow, tam určitě bude někdo vědět proč je to právě takhle, takhle detailně to už nevím.
Offline

fmfiain napsal(a):
Dobrý deň ↑ Aleš13:,
ja som to skúšal na VS community 2022 a vyhlásilo mi to chybu.
Konkrétne mi ukázalo, že nemôžem priradiť const char* do char*.
Ale možná to půjde s přetypováním, tedy ConstChar = (const char*) Char;
Jinak věci co překladač povolí a co né se mění snad s každou verzí. Takže třeba i spousta linuxových kódů co dříve šly přeložit bez problémů už dnes nejdou a musí se buď nastavit parametry překladače nebo dam doplnit nějaké takovéhle věci.
Offline
Dobrý deň,
našiel som spôsob ako previesť const char* do char*:
char* char1 = const_cast <char*>("text");Offline