Çözüldü Öğrenirken nelere dikkat edilmeli?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

flupesx

Femtopat
Katılım
12 Haziran 2023
Mesajlar
50
Daha fazla  
Cinsiyet
Erkek
Kod
#include <stdio.h>
#include <stdlib.h>
int main() {
char kitapad[20]="Avcunuzda ki Kelebek";
char yazar[30]="Ahmet Serif izgoren";
char turu[10]="Hikaye";
char sayfa[3]="124";
char basimyil[4]="2001";
printf("******** Kitap Tanitim ********\n\n\n");
printf("Kitapad: %s - KitapYazar: %s\n",kitapad,yazar);
printf("Turu: %s\n",turu);
printf("Sayfa Sayisi: %s\n",sayfa);
printf("Basim Yili: %s",basimyil);

return 0;
}
TERMINALDE CIKAN NERDE HATAM VAR?
-------------------------------------------

Kitapad: Avcunuzda ki Kelebek♀ a - KitapYazar: Ahmet Serif izgoren
Turu: Hikaye
Sayfa Sayisi: 124Hikaye
Basim Yili: 2001124Hikaye
PS C:\Users\PC\Desktop\C>
 
Çözüm
char ad[3] = "abc"; -> şimdi sen düşünüyorsun ki burada 3 karakterlik yer ayırdım ve üç karakter giriş yaptım, bu düşünce doğru ancak bunu printf fonksiyonuyla yazdırmaya kalktığında fonksiyon 4. bir karakteri dizi içinde arayacak biz buna null terminator diyoruz, assci karşılığı bu '\0' ifadedir.

doğrusu char ad[4] = "abc"; şeklinde olmalı.

Hatanın nasıl gerçekleştiğini de anlatayım; Const veriler stack üzerinde dip dibedir, hikaye de fazla boyut ayırdığın için onda null terminator bulunuyor. printf fonksiyonu da ilk print işlemindeki değişken adresinden başlayarak bu hikaye değişkenin stack üzerinde null terminatörün bulunduğu adrese kadar okuyup print etmek durumunda kalıyor.

Tavsiyem ise kullandığın C kitaplığına ait fonksiyonların detaylarını okuyup ona göre kullanman; C Programlama
char ad[3] = "abc"; -> şimdi sen düşünüyorsun ki burada 3 karakterlik yer ayırdım ve üç karakter giriş yaptım, bu düşünce doğru ancak bunu printf fonksiyonuyla yazdırmaya kalktığında fonksiyon 4. bir karakteri dizi içinde arayacak biz buna null terminator diyoruz, assci karşılığı bu '\0' ifadedir.

doğrusu char ad[4] = "abc"; şeklinde olmalı.

Hatanın nasıl gerçekleştiğini de anlatayım; Const veriler stack üzerinde dip dibedir, hikaye de fazla boyut ayırdığın için onda null terminator bulunuyor. printf fonksiyonu da ilk print işlemindeki değişken adresinden başlayarak bu hikaye değişkenin stack üzerinde null terminatörün bulunduğu adrese kadar okuyup print etmek durumunda kalıyor.

Tavsiyem ise kullandığın C kitaplığına ait fonksiyonların detaylarını okuyup ona göre kullanman; C Programlama
 
Çözüm
char ad[3] = "abc"; -> şimdi sen düşünüyorsun ki burada 3 karakterlik yer ayırdım ve üç karakter giriş yaptım, bu düşünce doğru ancak bunu printf fonksiyonuyla yazdırmaya kalktığında fonksiyon 4. bir karakteri dizi içinde arayacak biz buna null terminator diyoruz, assci karşılığı bu '\0' ifadedir.

doğrusu char ad[4] = "abc"; şeklinde olmalı.

Hatanın nasıl gerçekleştiğini de anlatayım; Const veriler stack üzerinde dip dibedir, hikaye de fazla boyut ayırdığın için onda null terminator bulunuyor. printf fonksiyonu da ilk print işlemindeki değişken adresinden başlayarak bu hikaye değişkenin stack üzerinde null terminatörün bulunduğu adrese kadar okuyup print etmek durumunda kalıyor.

Tavsiyem ise kullandığın C kitaplığına ait fonksiyonların detaylarını okuyup ona göre kullanman; C Programlama
Hocam Youtube den seri ceken birisinden izleyip kendim pratik yapmaya calisiyorum hani bana daha iyi öğrenmek icin verebilceginiz öğüt varsa çok müteşekkir olurum.
 
Hocam Youtube den seri ceken birisinden izleyip kendim pratik yapmaya calisiyorum hani bana daha iyi öğrenmek icin verebilceginiz öğüt varsa çok müteşekkir olurum.
C kolay bir dil ancak çoğu şeyi tecrübe ederek öğrenmek zorundasın, bunun için bir öğretici yok maalesef. Yukarıda da dediğim gibi kullandığın fonksiyonların manual'ini okuyup anladıktan sonra o fonksiyonu kullan, böylece hata yapma olasılığın azalır.

Hatta yukarıda yaptığım açıklamada da eksik bir bilgi var onu da tamamlayayım, illa tanımladığın diziler null terminator içerecek diye bir kaide yok bu derleyicinin insiyatifine kalmış bir olay. Olması gereken diziyi önce memset gibi bir fonksiyon kullanarak null terminator le doldurmak ya da dizi sonunda bir null terminatoru manuel olarak garanti etmek.
 
Senin girdiğin veri 3 haneli de bir de bellekte değişkenlerin sonuna null koyulur. Yani veri şöyle oluyor: ["1", "2", "4", NULL]

Burada hata aliyorum nerede sıkıntı bakabilir misin rica etsem?

Using System;
Using System. Collections. Generic;
Using System. Linq;
Using System. Text;
Using System. Threading. Tasks;

Namespace Pompa
{
İnternal class parametre
{
Static Void Main(string[] args)
{
String ad;
Console. WriteLine("Lutfen isminizi Girin: ");
Ad = Console.ReadLine();
Console. WriteLine("Merhaba: {0}", ad);
Console.Read();

}
}
}
 
Son düzenleyen: Moderatör:

Geri
Yukarı