Moro!
Heti alkuun pyydän anteeksi otsikkoa joka ei valota kysymystä mitenkään.
Ongelmani on kuitenkin seuraavanlainen. Käytän koodieditorina Dev-c++.
Kun yritän tallentaa käyttäjän antaman nimensä cinin avulla muuttujaan niin tulee windowsin virheilmoitus jostain kumman syystä. Mutta esim. ikää kysyttäessä eli silloinkun muuttuja tyyppi on int niin koodi kyllä toimii.
Tässä vähän koodia jota en saa toimimaan:
#include <iostream> using namespace std; int main() { char* nimi; cout<< "Anna nimesi: "<<endl; cin >> nimi; return 0; }
Dev-c++ tarkka versio on 4.9.9.2
Pistä
#include <iostream> #include <string> using namespace std; int main() { string nimi; cout<< "Anna nimesi: "<<endl; getline(cin, nimi); //Luetaan koko rivi, näin saa myös laitettua välilyönnit... cin.get(); //ettei ohjelma heti sammu return EXIT_SUCCESS; }
Edit: näin siis c++...
Tyyyppi char*
on pelkkä osoitin. Se siis vain sisältää tiedon, missä kohti muistia data sijaitsee. Mitään dataa et ole varannut, ja osoitinkin on alustamatta. Se voi siis osoittaa mihin tahansa kohti muistia, jonnekin, minne ohjelmallasi ei ole oikeutta kirjoittaa.
Suositeltavinta on käyttää valmista string-luokkaa, kuten vehkis91 esimerkissään. (Tuo getline-funktio ei silti ole tarpeen, vaan voit lukea myös >>-operaattorilla.) Toinen vaihtoehto on taulukko:
char nimi[100]; cin >> nimi;
Tässä tavassa on kuitenkin vaaransa: Jos käyttäjä syöttää niin pitkän nimen, ettei se mahdu taulukkoon, ohjelmalle voi käydä yhtä kehnosti kuin omassa versiossasi. Esimerkissä taulukkoon mahtuu 100 tavua, siis 99 ASCII-merkkiä ja yksi ylimääräinen merkki, joka ilmoittaa, että teksti loppuu. (Tämän avulla teksti voi siis loppua jo kesken taulukon, siis vaikkapa kolmen merkin jälkeen.)
tai sitten osoittajalla:
char *nimi = new char[100];
Tuossa tapauksessa pitää myös muistaa "poistaa" toi *nimi, koska muuten sen varaamaa muistia ei vapauteta ennen ohjelman loppua...
Edit: muistaakseni tämä tapahtuu : delete nimi; En oo 100% varma kun en ite noita new ja delete juttuja käytä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.