Yazar |
|
altuko
banlandı
Kayıt: 05.02.2006 |
|
Arkadaşlar aşağıdaki kodda anlayamadığım nokta şu;sonuçta tanımlanan yapının içerisinde bir pointer var bu pointer nasıl bir işlev görüyo da print ettiğimiz zaman maca as yazısını görüyoruz.net olarak yerleştiremedim kafama mantığını.sonuçta bir adres tutuyo taraf ve takım ifadeleri.a ve m nin adreslerini tutuyosa print edince o adresleri göstermesi lazım..derdimi tam anlatamış olabilirim.programlamadan fazla anlamam:) yardımcı olursanız sevinirim.teşekkürler....
include <stdio.h>
struct kart {
char *taraf;
char *takim;
};
int main()
{
struct kart a;
a.taraf = "as";
a.takim = "maca";
printf(" %s ",a.takim);
printf(" %s ",a.taraf);
return 0;
}
|
|
Yazar |
|
clairvoyant
Antalya
Kayıt: 05.05.2006 |
|
silindi: hatalı bilgi (o kadar ilaç alırsam böyle olur tabi :D)
Ama sonuçta şu önemlidir ki bu string'ler için bellekten yer ayırmak gerekir.
dinamik olarak
a.taraf = (char*)malloc(sizeof(char)*10);
statik olarak
struct kart {
char taraf[10];
char takim[10];
};
Ve string atamalarında sprintf fonksiyonunu kullanmanı öneririm.
sprintf(a.taraf, "as");
sprintf(a.takim, "maca");
http://www.cplusplus.com/reference/clibrary/cstdio/sprintf.html
Let`s make this world a better place to live !
|
|
Yazar |
|
altuko
banlandı
Kayıt: 05.02.2006 |
|
Deitel C/C++ kitabında bir örneği aynen yazdım.Bir çok üniversite de okutulan kitap(bizim ki de dahil).
Senin anlattığın yöntemleri biliyorum.ben de senin gibi düşünüyorum.Ama kitapta böyle örnekler var.ve ben anlamadım.neyse..benim de kafa bi dünya......anlatamıyorum derdimi...:):)
|
|
Yazar |
|
altuko
banlandı
Kayıt: 05.02.2006 |
|
ona benzer bir örnek...umarım daha iyi anlatabilirim bu örnekle derdimi...
#include <stdio.h>
int main()
{
const char *stringPtr = "Bu da bir stringtir";
printf("%s ",stringPtr);
return 0;
}
|
|
Yazar |
|
clairvoyant
Antalya
Kayıt: 05.05.2006 |
|
İlk örnek ile ikinci örnek farklı. Bir karakter dizisine tanımlama sırasında bir string atanabilir. Hemen hemen tüm derleyiciler destekler bu tip atamayı. Pointer için bellekte gereken uzunlukta yer ayrılır ve değerler yerleştirilir. Ama ilk örnek bir kitapta geçiyor olsa bile doğru olduğunu kabul etmiyorum. Çünkü karakter dizileri için önceden bellekten alan ayırmak şart.
Şimdi denemeden içim de rahat etmez, illa VS kuracağım bu saatte di mi :))
Let`s make this world a better place to live !
|
|
Yazar |
|
altuko
banlandı
Kayıt: 05.02.2006 |
|
peki sen benim anlamadığım noktayı anladın mı?stringPtr nin değerini yazdırınca "bu da bir stringtir" yazısı çıkıyo,ve bu olay benim kafama yatmadı.stringPtr bir adresi tutuyo dimi.neyin adresini tutuyo.ama yazdırınca adresini tuttuğu string i döndürüyo.ben bu işi anlamadım valla...
|
|
Yazar |
|
clairvoyant
Antalya
Kayıt: 05.05.2006 |
|
altuko yazdi | peki sen benim anlamadığım noktayı anladın mı?stringPtr nin değerini yazdırınca "bu da bir stringtir" yazısı çıkıyo,ve bu olay benim kafama yatmadı.stringPtr bir adresi tutuyo dimi.neyin adresini tutuyo.ama yazdırınca adresini tuttuğu string i döndürüyo.ben bu işi anlamadım valla... |
O printf'in özelliğidir. "%s" yerine "%d" yazarsan stringPtr'nin adresini görürsün (öyle olması lazım :D).
Let`s make this world a better place to live !
|
|
Yazar |
|
altuko
banlandı
Kayıt: 05.02.2006 |
|
ben denedim.dediğin doğru.ama yine bir sorun var,diyelim ki %s dediğimiz de o adreste tutulan değeri döndürsün.o adreste string in tümü tutulmaz ki.en fazla ilk harfi tutulur.o adresten başlayıp,null gördüğü yere kadar mı okuyo acaba.öyleyse helal olsun C diline yani:)
|
|
Yazar |
|
barbi
istanbul
Kayıt: 24.01.2006 |
|
C dilinde string ifadeleri derleyici tarafından char türden bir adres olarak ele alınır. Yani derleyici kodu okurken bir string ile karşılaşınca onu belleğe yerleştirir ve string yerinede o adresi koyar. Bu nedenle bir stringi char türden bir pointera atamanda bir sorun yok.
Sanırım senin takıldığın yer bir adresteki veriyi yazdırma kısmı. Printf in formatlama karakterlerinden %s ile bir adres verisini yazdırmaya çalışırsan, standart çıktıya o adresteki karakterleri yazar. string ifade daha önceden belleğe yerleştirildiği için ve boyutu da bilindiği için o karakter stringi yazdırabilirsin. O adresi yazdırmak istiyorsan %p ile yazdırabilirsin.
Ama stringlerle işlem yaparken dikkat et. C de stringler global nesneler gibi yer kaplarlar ve stringlerin değiştirilmesi tanımsız davranıştır.
people pray for strength, and guidance; they should pray for the mercy of a swift death...
|
|
Yazar |
|
altuko
banlandı
Kayıt: 05.02.2006 |
|
programlama bilgimin yetersizliğinden olsa gerek,hala olayı tam kavramış değilim.şöyle anlatsam daha mantıklı..
int *ptr;
ptr = 4;
yukarıdaki atama hata veriyo.bu mantığa göre verdiğim örneğinde hata vermesi lazım.
verdiğim örnekte ise char * türden bir stringPtr ye bir string atanmış. sonuçta stringPtr bir karakterin adresini tutabilir durumda.ama printf le yazdırdığımızda string in tamamını döndürüyo.stringptr neyin adresini tutuyo???nasıl oluyo halen anlamadım.ve halen anlatamıyorum..
|
|
Yazar |
|
altuko
banlandı
Kayıt: 05.02.2006 |
|
barbi aslında güzel bir açıklama yaptın.hafiften anladım sanki tekrar okuyunca....string konusuna bi bakmam lazım...Ben stringlerin bir adres gibi algılandığından habersizdim.
|
|
Yazar |
|
clairvoyant
Antalya
Kayıt: 05.05.2006 |
|
altuko yazdi | .....o adresten başlayıp,null gördüğü yere kadar mı okuyo acaba.öyleyse helal olsun C diline yani:) |
Hakkaten helal olsun C diline, kim bulduysa Allah razı olsun, Allah tuttuğunu altın etsin icad edenin.
Let`s make this world a better place to live !
|
|
Yazar |
|
nipci
Kayıt: 26.09.2007 |
|
altuko yazdi | programlama bilgimin yetersizliğinden olsa gerek,hala olayı tam kavramış değilim.şöyle anlatsam daha mantıklı..
int *ptr;
ptr = 4;
yukarıdaki atama hata veriyo.bu mantığa göre verdiğim örneğinde hata vermesi lazım.
verdiğim örnekte ise char * türden bir stringPtr ye bir string atanmış. sonuçta stringPtr bir karakterin adresini tutabilir durumda.ama printf le yazdırdığımızda string in tamamını döndürüyo.stringptr neyin adresini tutuyo???nasıl oluyo halen anlamadım.ve halen anlatamıyorum.. |
"Bu da bir stringtir" ;bu ve benzeri tüm string ifadeleri char türden adreslerdir.
Dolayısıyla char * türünden bir pointer a string ifadelerini atayabilirsin.
Peki neyin adresi?İfadenin ilk başladığı karekterin adresini tutar.
%s ise paremetre olarak adres alır.O adresten başlayarak NULL görene kadar yazdırır.
|
|
Yazar |
|
cantur
Rize
admin
Kayıt: 16.01.2006 |
|
string dediğiniz yapının char dizisi olduğunu aklınızda bulundurursanız integerlarla karşılaştırırken daha kolay düşünebilirsiniz. Ve c deki bir çok sitring fonksiyonu dizi içinde karşılaşacağı ilk null karakterine göre işlem yapmaktadır.
|
|
Yazar |
|
tuuba
Bursa
Kayıt: 22.01.2007 |
|
Benim arkadaşın sorduğuyla alakasız bi sorum var(yeni bir başlık açmayayım dedim de)
Visual studio 2005'te çalışırken farkında olmadan bi yerlere tıkladım ve arkada bişey çalışmaya başladı,kod yazarken benim boşluk yaptığım yere . (nokta) koyuyor(tokenizer gibi bişey bu............) satır başlarına da ->ok işareti yapıyor...Restart falan hepsini denedim ama hiç bi gelişme yok....
|
|
|
|
-
Del.icio.us
-
Digg
-
Facebook
-
Furl
-
Google
-
Blink
-
Simpy
-
Spurl
-
Y! MyWeb
|
|
| | | | | | | | | | | |