sizeof() komutu hep 2 değerini döndürüyor!
  • Bir kütüphane yazıyorum. Kütüphane içinde bir dizinin boyutunu (kaç elemandan oluştuğunu) öğrenmeye çalışıyorum ve bunun içinde sizeof() komutunu kullanıyorum. Ama hep 2 değerini döndürüyor. İnternette biraz araştırma yaptığımda şöyle birşey önermişler; (aynı öneri arduino'nun sayfasında da var) "int numEles = sizeof(LED_array) / sizeof(LED_array[0]); " Bunuda denedim ama olmadı. Bu konuda yardımlarınızı bekliyorum.
    Şimdiden teşekkürler.
  • Yazdığın kodu koysaydın daha iyi yardımcı olurduk. Muhtemelen diziyi fonksiyona geçirip fonksiyon içinde kullanıyorsun sizeof() u. Öyleyse o şekilde çalışmaz.
  • Kütüphane yazdığım için kod çok karmaşık o yüzden koymadım. Dediğin gibi dizi uzunluğunu kütüphanenin içinde okumaya çalışıyorum. Peki bunun başka bi yömtemi yok mu.
  • Kütüphaneyi kullanan kişi dizi ile birlikte dizi uzunluğunu da geçirecek fonksiyona. Başka bir yöntemi yok.
  • Degiskenin basina & isareti koyuyorduk galiba
  • sizeof komutu çok güvenilir bir komut değil bence , çünkü derleyicinize göre değişik sonuçlar verebilir özellikle integer tipinde bir array için. Onun yerine şu yöntemi kullanabilirsin.

    int test[]={1,2,3,4,5};
    int size=*(&test+1)-test;
    cout<<size;<br />
  • @EmbeddedSystem

    O yazdığının "sizeof(test) / sizeof(int);" ten bir farkı yok maalesef. Fonksiyon içinde dizinin boyutu bilinemez.
  • İnternette araştırdığım ve anladım kadarıyla sizeof() fonksiyon değil bir komut. Bu yüzden sadece derleme sırasında dizinin uzunluğunu hesaplıyor. Pointer falan da denedim ama yapamadım.
  • @amenofis ben fonksiyon içerisinde kullanmadım dikkat ettiyseniz.
  • sizeof kullanıldığına göre dinamik dizi kullanılmak isteniyor.. arduino ide bu konuda kısıtlı sanırım. daha önce böyle bişeyle uğraştım fakat sorunu başka şekilde çözdüm diye hatırlıyorum..
    iki yöntem kullandım sanırım... (hatırladığım kadarıyla)

    1) sabit bir array tanımlayıp sizeof yerine index değişkeni kullanmak::

    int arr_boyut=0; gibi diziye ekleme yapınca arr_boyut++ çıkarma yapılınca arr_boyut--;

    aradan eleman çıkaraçaksan tampon bir array yapıp aktar çevir olayınıda dahil etmek gerekiyordu

    2) String değişken tanımlayıp ekleme çıkarma aradan alma işlemlerinden sonra string.length ile sizeof benzeri bişey elde etmek

    çözümmüdür bilmiyorum ama denemek lazım.. uzun zaman oldu



  • Merhaba
    Soruyu doğru anladım mı bilmiyorum ama aşağıdaki kodları bir deneyin.

    int dizi_sayi;
    int integer_sayi;

    char * character_dizi[] = {"eleman_a", "eleman_b", "eleman_c", "eleman_d"};
    int integer_dizi[] = {0, 1, 2, 3, 4};

    sonucu elde etmek için

    dizi_sayi = sizeof(character_dizi) / sizeof(char *); // vereceği sonuç 4
    integer_sayi = sizeof(integer_dizi) / sizeof(int *); // vereceği sonuç 5

    Düzeltme: loop dışında kullanılma isteniyormuş ve bu kodlar kullanılamıyor bende bilmezdim. ancak 2x16 LCD kayan yazı için aşağıdaki gibi birşey kullandım belki yardımcı olur.

    char dizi[] = "A,B,C,D";// diziyi bu şekilde alabilirsen
    YaziKaydir(dizi);

    void YaziKaydir(char KayanYazi[]) {

    char * parca = strtok(KayanYazi, ",");
    int i;
    while (parca != NULL) {
    i++;
    Serial.print("Deger: ");
    Serial.print(parca);
    Serial.println(" ");
    parca = strtok(NULL, ",");
    }
    Serial.println(" ");
    Serial.print("Toplam: ");
    Serial.print(i);

    Serial.println(" ");
    Serial.println(" ");
    }

    Sonuç:

    Deger: A
    Deger: B
    Deger: C
    Deger: D

    Toplam: 4

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.