[ azzpoz @ 05.11.2013. 06:32 ] @
| Code: void osoba::setIme(char *io)
{
if(ime != NULL)
{
delete []ime;
ime = NULL;
}
ime = new char[strlen(io)+1];
strncpy(ime,io,strlen(io)+1);
ime[strlen(io)+1] = '\0';
}
Konstantno mi program pada zbog ove funkcije!
Ako stavim strcpy(ime, io) -> radi bez problema, ali zašto ne radi sa strncpy?
Ako bih postavio strncpy(ime, io, strlen(io)-1) radit će!!!
Zašto moram -1, kada sam već +1 naveo da će biti za -> '\0'
|
[ Burgos @ 05.11.2013. 09:11 ] @
Tražiš problem na pogrešnom mestu.
Ako inicijalizuješ niz sa:
Code:
ime = new char[strlen(io)+1];
indeksi niza idu od
0, pa sve do
strlen(io) (a ne do
strlen(io) + 1).
U daljem kodu imaš sledeće:
Code:
ime[strlen(io)+1] = '\0';
čime adresiraš nealociran deo memorije.
[ Mihajlo Cvetanović @ 05.11.2013. 10:15 ] @
Predstavljanje tekstualnog niza znakova sa char*, i alociranje sa new[], i kopiranje sa strcpy su sve rešenja preuzeta od starijeg brata, jezika C. Mlađi brat, C++, ima modernije i bolje rešenje - std::string. Treba njega koristiti, i sve ove muke će postati deo prošlosti, a kod će postati jednostavniji i čitljiviji. Možda ćeš naleteti na neke druge probleme, ali dugoročno gledano isplati se preći na ono što je bolje, i što je izmišljeno upravo da bi zamenilo nešto što je ranije postojalo.
[ azzpoz @ 05.11.2013. 17:16 ] @
Još uvijek učim C++, pa me zanimao i ovaj dio...
Mislim da sam razumio!
Copyright (C) 2001-2024 by www.elitesecurity.org. All rights reserved.