Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++ Char Pointer To Char

tesmu [18.11.2006 20:28:15]

#

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?

Blaze [18.11.2006 20:47:32]

#

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.

tesmu [18.11.2006 21:03:27]

#

Entäs miten tuo on toisinpäin?

*testi = toinen; ei toiminut

KeKimmo [18.11.2006 21:12:28]

#

testi = &toinen;

&-operaattori palauttaa muuttujan muistiosoitteen.

tesmu [18.11.2006 21:56:30]

#

noniin okei sitten vielä yksi kysymys

miten converran const *charin *chariksi

ja mieluiten sellaiseksi *chariksi jossa alkioitten määrä on määritelty

sqwiik [18.11.2006 23:23:03]

#

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.

Markus [19.11.2006 09:55:03]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta