folder Tahribat.com Forumları
linefolder C - C++
linefolder C Array Değişmesini Engellemek



C Array Değişmesini Engellemek

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nurulmac11
    nurulmac11's avatar
    Kayıt Tarihi: 04/Ağustos/2012
    Erkek

    Cde fonksiyona string array gönderiyorum ama *pointer olarak göndermememe rağmen global olan string arrayi değiştirio. ben sadece fonksiyon içinde değişmesini istiyorum nasıl sağlarım ?

     

    örnek yazim karışık olmuş biraz.

     

    char string[128];

    int main(){

    void myfunc(char x[128]){

    x[5]='c';

    }

    myfunc(string);

    printf("%s",string);

    }

    (kodu denemedim ama mantık bu)

    burda stringin aynı kalmasını istiyorum.

    nurulmac11 tarafından 29/Nis/16 17:14 tarihinde düzenlenmiştir

    black implies white, self implies other, life implies death.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DrKill
    DrKill's avatar
    Kayıt Tarihi: 10/Mart/2004
    Erkek

    C ve C++ da diziler pass by value şeklinde oluyordu bildiğim kadarıyla. Dolaylı yoldan zaten diziler pointer olduğu için temel anlamda pass by adress şeklinde yollanıyor.

     

    Birde main fonksiyonunun içinde fonksiyon tanımlamak ne demektir. Bu kodu yazan en yakın zamanda intihar etmek felan mı istiyor? Polise haber vermelisin.

    DrKill tarafından 29/Nis/16 18:03 tarihinde düzenlenmiştir

    Bu imzayı her gördüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı sömürmektir
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nurulmac11
    nurulmac11's avatar
    Kayıt Tarihi: 04/Ağustos/2012
    Erkek
    DrKill bunu yazdı

    C ve C++ da diziler pass by value şeklinde oluyordu bildiğim kadarıyla. Dolaylı yoldan zaten diziler pointer olduğu için temel anlamda pass by adress şeklinde yollanıyor.

     

    Birde main fonksiyonunun içinde fonksiyon tanımlamak ne demektir. Bu kodu yazan en yakın zamanda intihar etmek felan mı istiyor? Polise haber vermelisin.

    hocam yeni öğreniyorum C'yi :D bi çaresi yok mu yani ? aklıma veriyi bitfield şeklinde göstermek geldi ama stringi nasıl manipüle edeceğimi biliyorum bitfield olursa içinden çıkabilir miyim bilmiyorum.


    black implies white, self implies other, life implies death.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Odd Emoji 3D
    BerkayCit
    BerkayCit's avatar
    Kayıt Tarihi: 25/Şubat/2011
    Erkek
    nurulmac11 bunu yazdı
    DrKill bunu yazdı

    C ve C++ da diziler pass by value şeklinde oluyordu bildiğim kadarıyla. Dolaylı yoldan zaten diziler pointer olduğu için temel anlamda pass by adress şeklinde yollanıyor.

     

    Birde main fonksiyonunun içinde fonksiyon tanımlamak ne demektir. Bu kodu yazan en yakın zamanda intihar etmek felan mı istiyor? Polise haber vermelisin.

    hocam yeni öğreniyorum C'yi :D bi çaresi yok mu yani ? aklıma veriyi bitfield şeklinde göstermek geldi ama stringi nasıl manipüle edeceğimi biliyorum bitfield olursa içinden çıkabilir miyim bilmiyorum.

    başka bir kopyasını oluşturursun böylece orjinal dizin değişmemiş olur. ama istediğin şey bu mu?

    void myFunc(char x[]){
    	char tempDizi[128]; strcpy(tempDizi, x);
    	tempDizi[5] = 'c'
    	printf("%s", tempDizi); //dizinin değiştirilmişi
    }

     

     Holy e not: Bug buldum tempDizi[5] = 'c' yazıyor 3. satırda. Taglarda c kullanıldığı için öyle yapıyor sanırım.

     

     @DrKill callByValue değilde callByRef olarak çağırılıyor sanırım.

    BerkayCit tarafından 29/Nis/16 18:42 tarihinde düzenlenmiştir

    havalı bir şeyler yazdığımı hayal edin
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    pcdoktor636
    pcdoktor636's avatar
    Kayıt Tarihi: 12/Ocak/2010
    Erkek

    Sen char x[10]; dedigin zaman (genellikle) 10 bytelik bir alanin basina point eden bir pointer olusturmus oluyorsun(aslinda array'in adi bir pointer gorevi goruyor, ama array ve pointer ayni sey degil). O yuzden senin function(char string[]) demenle function(char *string) demen arasinda bir fark yok.

    Detayli bir cevap icin suraya bakabilirsin: http://eli.thegreenplace.net/2009/10/21/are-pointers-and-arrays-equivalent-in-c

    Telefondan yaziyorum, o yuzden duzgun bir cevap olmadi. Yanlisim varsa tugberk veya firex carpsin beni.

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DrKill
    DrKill's avatar
    Kayıt Tarihi: 10/Mart/2004
    Erkek
    mRBerkay bunu yazdı
    nurulmac11 bunu yazdı
    DrKill bunu yazdı

     @DrKill callByValue değilde callByRef olarak çağırılıyor sanırım.

    Aynen hocam yanlış yazmışım. PassByAdress şeklinde diyecektim zaten cümlenin sorununda yazmışım passByAddress diye yazmışım.


    Bu arada dedikleri gibi dizinin bir kopyasını oluşturursun olur biter.

     

    Ya da ANSI C yerine ISO C++ ile çalışıyorsan, String sınıfı ile çalışabilirsin, nesnenin bir kopyasını oluşturman daha kolay olur.

     

    DrKill tarafından 29/Nis/16 22:14 tarihinde düzenlenmiştir

    Bu imzayı her gördüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı sömürmektir
Toplam Hit: 2216 Toplam Mesaj: 6
c string array