merhaba arkadaslar... ufak bir program ile fonksiyona aktardigim dizi isaretcisini fonksiyon icinde görüntülemek yada degisiklik yapmak istiyorum. Amac main de tanimlanan bir karaterin fonksiyon icinde degistirildikten sonra main devamina degisikligin etkili oldugunu görebilmek. Sonuc olarak ekranda "Hallo World" görmeliyim. Hatali sonuc veren programim su sekilde...

int main()
{
    char *pointer = "Hallo"; 
    test(&pointer); 
    printf("%d\\n",*pointer);
    return 0;
}

int test(char **pointer) 
{ 
    char* s = new char[100];
    s = "World";
    if (*pointer) 
    { 
    strcat(*pointer,s);
    }
    return 0;
}

soruldu: 17 Oca '13, 04:46

beterman's gravatar image

beterman
285131722
cevap kabul oranı: 0%

değiştirildi: 17 Oca '13, 08:38

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183

1

Pointer kullanmadan aynı işi yapan fonksiyon olsa olmaz mı? Amaç senaryoyu mu gerçekleştirmek, yoksa pointer kullanımının nasıl olduğunu mu görmek?

(17 Oca '13, 07:35) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

her ikiside. aslinda temel olarak pointer ve kullanimi biliyorum. ama pointer'e isaret eden baska bir pointer in fonksiyona parametre olarak atanmasini mantigini anlamaya calisiyorum. yukardaki program calisir hale gelirse kendim oturup mantigi anlamaya calisabilirim. Sonuc olarak yukardaki örnek makro büyüklükteki bir programda görülüp mikro bir örnek olarak dönüstürülmüstür...

(17 Oca '13, 07:39) beterman beterman's gravatar image

yukaridaki kodda sanirim konu disinda bazi hatalar var. fonksiyondan dondukten sonra ekrana %d ile yazdirmissiniz, ve *pointer olarak yazdirmissiniz, bu pointer daki stringi yazdirmamasi lazim, stringin ilk harfi olan "H" nin int degerini yazdirmaya kalkabilir. neyse asagidaki kod yapmak istedinizi yapiyor gibi ama belki sizin yapmak istediginiz yolla olmamis olabilir dolayisiyla sorunuzu cevaplamamis olabilir. eger oyleyse asagidaki kodda sizin istediginize uymayan kisim uzerinden konusabiliriz belki.

#include <stdio.h>
#include <string.h>
int test(char *pointer);
int main()
{
    char  pointer[20] = "Hallo";

    test( pointer); 
    printf("%s  \\n", pointer);
    return 0;
}
int test(char *pointer) 
{ 
    char* s = " World";

    if ( pointer[0]) 
    { 
        strcat( pointer,s);
    }

    return 0;
}

bir de sizin yaptiginizda su sorun olabilir,

char *pointer = "Hallo";

burada derleyici "Hallo" kadarlik yer ayirip oraya "Hallo" yu yerlestirip baslangic adresini pointer degiskenine koymustur, dolayisiyla "Hallo" da 5 karakte bir de sonraki sonlandirma icin '\0' karakteri 6 karakterlik yer ayrilmis, bellegin sonrasinda baska seyler vardir filan. strcat fonksiyonu birinci parametre olan hedef alaninin iki stringin birlesimini tutabilecek buyuklukte olmasi gerektigini soyluyor, dolayisiyla sonuna bir de "World" eklenince bizim icin ayrilmamis bir alani bozmus olabiliriz ve bu da sorun cikarmis olabilir.

permanent link

cevaplandı: 19 Oca '13, 13:32

tafali's gravatar image

tafali
4593412
cevap kabul oranı: 12%

değiştirildi: 19 Oca '13, 13:40

char *pointer = "Hallo"; ile char * pointer = new char[6]; pointer = "Hallo";

arasindaki tek fark derleyicinin farkli yerlerde "Hallo" 'yu yerlestirip adreslerini pointer degiskenine koymasidir dimi? 1. Örnekte "Hallo" Stack'e 2. Örnekte ise Heap'e yerlestiriliyor...

(21 Oca '13, 02:33) beterman beterman's gravatar image

new dediginize gore sanirim C++ kullaniyorsunuz. C++ bilmiyorum. ama tahminim soylediginiz dogru olmasi lazim. fakat ilk ifadenin global ya da lokal olmasi farkeder sanirim. ayrica initialize icin olan string de stack de tutulmuyor olabilir. suraya bir bakin isterseniz.

http://stackoverflow.com/questions/1169858/global-memory-management-in-c-in-stack-or-heap

(21 Oca '13, 08:02) tafali tafali's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×45
×42

Soruldu: 17 Oca '13, 04:46

Görüntüleme: 1,168 kez

Son güncelleme: 21 Oca '13, 08:02

powered by BitNami OSQA