Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

strcpy i strncpy pocetnicko

[es] :: C/C++ programiranje :: C/C++ za početnike :: strcpy i strncpy pocetnicko

[ Pregleda: 2700 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

VirtualPoP
VirtualPoP

Član broj: 87655
Poruke: 123
*.mainstream.co.yu.



+24 Profil

icon strcpy i strncpy pocetnicko21.02.2007. u 20:59 - pre 208 meseci
Pozdrav svima! Molim za malo objasnjenje. Izgleda da nisam najbolje shvatio kako rade funkcije strcpy strncpy.
Naime kako sam shvatio strcpy prima dva argumenta i kopira drugi u prvi. Kako sam shvatio ako je izvor veci od destinacije pise van bafera. Zasto onda u donjem kodu:
Code:

{
    char string1[]="No man is an island.";
    char string2[9];
    strcpy(string2,string1);
    cout<<"string1: "<<string1<<endl;    
    cout<<"string2: "<<string2<<endl;
}

dobijam izlaz:
string1: island.
string2: No man is an island.

Zasto se promenio string1, ovako bi valjda trebao da izgleda string2?
U drugom primeru strncpy prima treci argument tako da bude manji od broja clanova string1.
Code:

{
    char string1[]="No man is an island.";
    char string2[11];
    strncpy(string2,string1,10);
    cout<<"string1: "<<string1<<endl;    
    cout<<"string2: "<<string2<<endl;
}

Po objasnjenju iz knjige ocekivao sam da iskopira samo 10 znakova. ali dobijam sledeci izlaz:
string1: No man is an island.
string2: No man is ¦¦No man is an island.

Zasto? Hvala unapred.
 
Odgovor na temu

nikoladsp
nikola radovanovic
trenutno-developer
novi sad

Član broj: 5455
Poruke: 193
*.ns.ac.yu.



Profil

icon Re: strcpy i strncpy pocetnicko26.03.2007. u 13:35 - pre 207 meseci
pokusacu da nabodem koristan odgovor : ako pokrenes tvoj program u debug modu, videces da je string2 u memoriji neposredno pre stringa1, tako da kada izvrsis kopiranje, na mesto stringa1 ce biti iskopiran ceo zadrzaj stringa2, ali ce to prebrisati i mesto u memoriji gde se nalazi polazni string (sto naravno nije ponasanje koje zelis...)

resenje je jednostavno: kada radis sa stringovima, uvek ostavi dovoljno mesta da moze da stane ono sta ti treba. kada bi povecao velicinu bafera sa 9 na recimo 64 ovo ti se ne bi desilo( jer bi bili dovoljno razmaknuti u memoriji).

pogledaj slike, pre i posle strcpy, pa ce ti biti jasno.

najbolje koristi strlen u ovakvim operacijama da ti se ne bi ovakve stvari desavale, a sem toga nikada ne znas sta mozes da prebrises ovako, pa ti se moze desiti katastrofa koju nikada ne bi bio u stanju da otkrijes (tacnije ne bi je otkrio danima).

sto se tice sigurnosti dobra je praksa da se koriste operacije nad stringovima koje dozvoljavaju kopiranje samo odredjenog broja karaktera (kao strncpy), tako smanjujes mogucnost prelivanja bafera.

poz
ja sam panker sa diplomom kod moje mame...
Prikačeni fajlovi
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: strcpy i strncpy pocetnicko

[ Pregleda: 2700 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.