

CCS C String Truncated Hatası Ve Yüksek RAM Kullanımı
-
Mikrodenetleyiciler ödevi için aklıma tavla zar atma uygulaması geldi.
CCS C ile yapmaya çalıştım bir şeyler, tabi bellek yönetimi konusunda sıkıntılıyım.
String Truncated hatası alıyorum, Bellek %67 kullanılıyor. Bir yerlerde sorunum var. String tanımlamada sıkıntım var büyük ihtimalle, pointer kullanmadım.
Sarı virgüllerin olduğu yere denk gelince ekranda sıkıntı çıkartıyor.


Yukarıda sadece Cihar-i Se yazması gerekiyordu.
Kodlar : http://paste.ubuntu.com/15407373/
pSkpt tarafından 17/Mar/16 14:44 tarihinde düzenlenmiştir -
http://stackoverflow.com/questions/6599707/2d-character-array-initialization-in-c
Array tanimlaman yanlis hocam.
-
Konu Dışı Up olsun...
yek = 1
du(dıdo) = 2
se(sıse) = 3
çar = 4
penç = 5
şeş = 6
Çok cahilim sadece bizim buralarda böyle sayıyorlar sanıyordum. sayılara neden kürtçe isim verilmiş bi araştırmak lazım.
-
DuPi bunu yazdı
Konu Dışı Up olsun...
yek = 1
du(dıdo) = 2
se(sıse) = 3
çar = 4
penç = 5
şeş = 6
Çok cahilim sadece bizim buralarda böyle sayıyorlar sanıyordum. sayılara neden kürtçe isim verilmiş bi araştırmak lazım.
Farsca kokenli onlar hocam :)
-
Yazdığın kod acayip geldi bana. Ondan kodun hakkında yorum yapmayacağım ama %67 bellek sıkıntın string tanımlarken "char rom" diye tanımlamandan dolayı kaynaklanıyor. ROM diye birşey algılamadığı için direk RAM'e yazmış.
O kısımları "char const" diye değiştirirsen sıkıntın çözülür.
torpedo_XL tarafından 17/Mar/16 19:15 tarihinde düzenlenmiştir -
http://paste.ubuntu.com/15416516/
şu şekilde değiştirdim.
RAM : 11%
ROM: 13%
Fakat sonuç şu şekilde çıkıyor.

Büyük ihtimal pointer olarak tanımladım ama çağırırken pointerları çağırıp hafızadan orayı almaya çalışıyorum sorun oradan çıkıyor.
Nasıl düzeltebilirim?
-

şu şekilde değiştirerek düzelttim fakat hala daha string array ve pointer'ları tam anlamıyla kavrayabilmiş değilim.
char zar; diye bir şey oluşturup switch içerisinde
case 1: zar = zar_1[buyuk-kucuk];
yapıp çalıştırınca mesela olmuyor.
char *zar; denedim. char zar[]; denedim char zar[][]; denedim olmadı. Bunla alakalı güzel bir kaynak var mı acaba C de array ve pointer kavramlarını tam olarak anlayabileceğim.
-
Hem bir up olsun çünkü mutlaka iyi bilen vardır ama benim bildiğim kadarıyla eğer köşeli parantez kullanıyorsan diğer tarafında adreslenebilir olması lazım. Senin direk olarak ataman ve değiştirmen bir hataya yol açıyor olabilir. Bunu illa bu şekilde yapıcam köşeli parantezleri kullanıcam dersen strcpy kullanınca sorun düzeliyor.
Bildiğim kadarıyla diziyi sen değiştiriceksen *dizi_str şeklinde tanımlaman lazım. Bu şekilde tanımlayınca dizi_str artık bir değişkendir ve program tarafından değiştirilebilir.
Ama mesela char dizi_str [20] yapıp dizi_str = "merhaba" yazarsan yanlış oluyor çünkü dizi_str sabiti değiştirilmeye çalışılınıyor. Strcpy kullanarak düzeltilebiliniyor.. strcpy (dizi_str, "merhaba") yapınca düzgün oluyor.. ama tabi bildiğim kadarıyla program tarafından değiştiriliyorsa genelde *dizi_str şeklinde kullanılmalı. Böyle tanımladıktan sonra dizi_str = "merhaba" dersek sorun çıkmaz.
Tabi senin programda birde kullanılacak dizinin sabit tutulması gerekiyor. Yani tanımlamadan yazarsak kısa bir kelimeyi uzunla değiştirirse sorun çıkmaz ama uzun bir kelimeyi kısa ile değiştirirse sorun çıkar. Onun için farklı bir çözüm geliştirmek gerek. Daha iyi bilenler bizi aydınlatacaklardır :)
Not: Sanırım bu sorunuda malloc kullanarak çözebilirsin.
bkz. http://turgayozgur.com/c-de-malloc-calloc-free-realloc-fonksiyonlari.html
BerkayCit tarafından 19/Mar/16 11:18 tarihinde düzenlenmiştir