Elikkäs jos mulla on tällätavalla muuttujat
char *testi;
char toinen;
niin miten saan tuon toinen muuttujan arvoksi testi ilman että kääntäjä valittaa viallisesta convertoinnista?
Dereferensoi (ota se arvo, johon se pointteri osoittaa) se pointteri, ts. toinen = *testi;
Huomaathan sitten, että char-muuttuja voi todellakin pitää sisällään vain yhden merkin.
Entäs miten tuo on toisinpäin?
*testi = toinen; ei toiminut
testi = &toinen;
&-operaattori palauttaa muuttujan muistiosoitteen.
noniin okei sitten vielä yksi kysymys
miten converran const *charin *chariksi
ja mieluiten sellaiseksi *chariksi jossa alkioitten määrä on määritelty
Tarkoitatko jotakin tällaista muunnosta?
const char * vakio = "tekstiä"; char *toinen; toinen = (char*)vakio;
vai
const char * vakio = "tekstiä"; char toinen[40]; /* Tämän oikeellisuudesta en todellakaan ole varma, korjatkoon paremmin asiasta tietävä. */ &toinen[0] = vakio;
Suosittelisin kuitenkin sprintf-funktion käyttöä tässä tilanteessa.
Const-määreellä määritettyjä muuttujia EI missään nimessä saa mennä tyyppimuuntamaan ei-const-tyyppisiksi!
Kääntäjä nimittäin saattaa optimoida const-muuttujat siten, että niiden arvojen sorkkiminen kaataa koko ohjelman. Const muuttuja ei välttämättä sijaitse muistissa ollenkaan, vaan sen arvo "leikataan ja liimataan" niihin kohtiin ohjelmaa joissa sitä tarvitaan.
Jos sinun on aivan pakko saada "const char *"-merkkijono "char *"-merkkijonoksi, on ainut tapa tehdä se turvallisesti merkkijonon kopioiminen, vaikka sprintf-funktiolla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.