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

Char i pointeri ;)

[es] :: C/C++ programiranje :: Char i pointeri ;)

[ Pregleda: 2143 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Yu Raider
Ivan Djordjevic
Bg

Član broj: 40731
Poruke: 273
*.smin.sezampro.yu.



+2 Profil

icon Char i pointeri ;)01.05.2006. u 21:00 - pre 218 meseci
Jako sam radoznao i ovo me baš zanima :

Ovaj kod:

Code:


#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{

char a = 'a';
char* b = &a;
cout << *b << endl;



Vraća rezultat "a".

E sad - onako kako sam ja naučio stringovi su zapravo skupovi slova koji imaju početnu adresu i na kraju znak "\0" koji određuje kraj stringa. Da li compiler sam ubaci taj znak na kraju ??? Ili sam ja potpuno pogrešno razumeo stringove...

Pozdrav
SLIder.
 
Odgovor na temu

del-boy
Bojan Delić
Beograd

Član broj: 9330
Poruke: 1089

Sajt: www.delic.in.rs


+21 Profil

icon Re: Char i pointeri ;)01.05.2006. u 22:11 - pre 218 meseci
Ti ovde uopšte nemaš string, nego običan karakter!

Prvo si postavio da ti u promenljivoj a bude slovo a!
U sledećem redu deklatišeš pokazivač koji pokazuje na adresu promenljive a! Samim tim kada si ispisao na ekran *b mora da ispiše ono što se nalazi u promenljivoj a!
 
Odgovor na temu

lowlife
Adam Stanojević
Beograd

Član broj: 83604
Poruke: 15
213.137.99.*



Profil

icon Re: Char i pointeri ;)01.05.2006. u 22:22 - pre 218 meseci
Pozdrav!

Ti u stvari stampas nulti byte(prvi znak) i nemas string. string bi 'uhvatio' sa b a ne sa *b. Ali opet stringa nema i poceo bi da divlja po memoriji dok ne pukne ili ne naidje na '\0'. b si namestio na char* i to je u redu ali si mu dao samo 1 byte bez kraja te ne moze da bude string - samo je pokazivac na znak.
 
Odgovor na temu

z@re
Zarko Bulatovic
Split

Član broj: 29849
Poruke: 443
*.cmu.carnet.hr.



+25 Profil

icon Re: Char i pointeri ;)02.05.2006. u 03:40 - pre 218 meseci
"string" je niz znakova koji na svom kraju ima jos jedan dodatni znak, terminacijski, '\0'. Zadnji znak mora postojat, jer sve funkcije u C-u koje barataju sa nekakvim stringovima, to jest nizovima znakova, primaju pointer na pocetnu adresu tog niza. To je pocetna adresa, a kraj niza oznacava upravo taj terminacijski znak.

Ti ovdje uopce nemas string, nego si deklarirao jedan znak i inicijalizirao ga agregatno, pa si samo u jedan pointer tipa char, strpao memorijsku adresu gdje je lociran taj tvoj znak. Nakon toga ispisujes taj znak, ali preko pointera koji pokazuje na adresnu lokaciju.

Prakticki, (char *) ne mora uopce da pokazuje na nekakva slova ili neke nizove. U programiranju niskog nivoa se koristi upravo radi mogucnosi pokazivanja na 1 byte duzine.

Sta se tice tvog pitanja : ti kad agregatno inicijaliziras "string" u C-u, dakle char *x = "nesto"; ili char[] x = "nesto"; kompajler se sam pobrine da alocira dovoljno mjesta za tvoja slovca, kao i zadnje mjesto za term. znak. Kad ides rucno radit, trebas dodatno alocirat taj jedan znak, bas na primjeru za "nesto" :

Code:

char *x = (char *)malloc((sizeof(char) * 5) + 1);
strcpy(x, "nesto");
*(x + 5) = "\0";




Q: HSP56 Micromodem nece da radi kompjuter ga prepozna a kad treba da se konektujem nece ne daje ni znaka zivota. u cemu je problem.

A: Crko mozda od grmljavine mozda od spanaca. Uglavnom baci ga u WC solju jako povuci vodu. Skupi 5e i uzmi drugi i ne postuj temu na pogresno mesto.
 
Odgovor na temu

Yu Raider
Ivan Djordjevic
Bg

Član broj: 40731
Poruke: 273
..njuel-bg.customer.sbb.co.yu.



+2 Profil

icon Re: Char i pointeri ;)02.05.2006. u 11:52 - pre 218 meseci
@lowlife
U tome je baš i poenta! Ako pointujem na adresu slova a, treba da mi se vrati sve do prvog null chara! Doduše tek sam sad shvatio da je char zapravo 1 bajt. Ima li neko neki kod koji bi to uradio?
SLIder.
 
Odgovor na temu

kurt.hectic
Kurt Hectic

Član broj: 66049
Poruke: 25
*.etf.bg.ac.yu.



Profil

icon Re: Char i pointeri ;)02.05.2006. u 14:23 - pre 218 meseci
Ako hoces da se deo memorije pocev od b ispise kao ASCIIZ, onda
treba da kazes sta mislis:
Code:

 cout << b << endl;

umesto
Code:

 cout << *b << endl;


Razlika sto je prvi izraz tipa char* pa ga operator << ispisuje kao char* (za koji vazi ASCIIZ pravilo).
Treba da dobijes neko djubre, koje pocinje znakom 'a'.

Ako ispisujes *b, posto je tip izraza *b jednak char, operator << ga ispisuje kao char.
 
Odgovor na temu

Yu Raider
Ivan Djordjevic
Bg

Član broj: 40731
Poruke: 273
..njuel-bg.customer.sbb.co.yu.



+2 Profil

icon Re: Char i pointeri ;)02.05.2006. u 17:53 - pre 218 meseci
E, to mi je trebalo. Hvala! A da li mogu da odredim na kojoj adresi da kompajler strpa slova? Mozda preko inline ASM?
SLIder.
 
Odgovor na temu

z@re
Zarko Bulatovic
Split

Član broj: 29849
Poruke: 443
*.cmu.carnet.hr.



+25 Profil

icon Re: Char i pointeri ;)03.05.2006. u 00:02 - pre 218 meseci
Hmm...sad mi pada na pamet jedino preko offseta od neke adrese.

Code:

#include<stdio.h>
#include<stdlib.h>

int main()
{
    char a = 'x';
    char *m = &a;
    *(m + 13) = 't';
    
    for(int i = 0; i < 14; i++) 
        printf("%x, %c\n", m, *(m + i)); 
    system("PAUSE"); return EXIT_SUCCESS;    
}


Znaci, 13 bajtova od pocetne adrese gdje smo strpali znak 'x', stavljamo znak 't'. Medjutim, ovaj kod radi, ali to memorijsko mjesto nije alocirano, nego smo samo nesto tek tako zapisali tamo...Moze se desit da prilikom daljnjeg izvrsavanja koda nesto pregazi to mjesto.

[Ovu poruku je menjao z@re dana 03.05.2006. u 01:02 GMT+1]

Q: HSP56 Micromodem nece da radi kompjuter ga prepozna a kad treba da se konektujem nece ne daje ni znaka zivota. u cemu je problem.

A: Crko mozda od grmljavine mozda od spanaca. Uglavnom baci ga u WC solju jako povuci vodu. Skupi 5e i uzmi drugi i ne postuj temu na pogresno mesto.
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1342
222.67.154.*

ICQ: 14293955
Sajt: https://github.com/milost..


+48 Profil

icon Re: Char i pointeri ;)03.05.2006. u 11:45 - pre 218 meseci
Da dodam, string predstavlja niz karaktera ili deo teksta i način na koji je on zapisan je stvar konvencije.
Da, u C jeziku su najčešći stringovi terminisani nulom, ali to ne mora biti tako. Može se držati i
kao "pascal string" koji na početku ima zapisanu dužinu (broj karaktera) koja opet može biti zapisana
različitim brojem bajtova.

Dakle, sve zavisi od konvencije.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Char i pointeri ;)

[ Pregleda: 2143 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

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