Arama butonu
Bu konudaki kullanıcılar: 1 misafir
4171
Cevap
168209
Tıklama
3
Öne Çıkarma
Cevap: C/C++/C# Sorularınız Buraya. . .(GÜNCEL) (105. sayfa)
C
12 yıl
Yarbay

Rica.. Kolay gelsin.




Bu mesajda bahsedilenler: @baranbula
4
12 yıl
Teğmen

İntegrali kendiniz kağıt üzerinde çözüp onu programa uyarlayacaksınız.




Bu mesajda bahsedilenler: @evren199
W
12 yıl
Onbaşı

1. resim === http://s1310.hizliresim.com/1g/g/tl9by.jpg
2. resim === http://o1310.hizliresim.com/1g/g/tl9cb.jpg

2. matrisin 3. sütun 3.satırında 2 yazıyor 4 yazmama rağmen 4.satırdada 1 yazıyor gene 4 yazmama rağmen

Acaba diyorum benim compiler'ımda mı bir sorun var dev-c++ kullanıyorum sizin önerebileceğiniz başka, kullanımı kolay compiler var mıdır yada siz ne kullanıyorsunuz

bu arada ilgilendiğiniz için teşekkür ederim.



EDIT:

int dizi[100][100], dizi1[100][100], sonuc[100][100] // sizin yazdığınız
int a,b,i,j,dizi[a] ,dizi1[a] ,sonuc[a] ; //benim yazdığım

sanırım [a] yazdığım için bu sorun ortaya çıktı.

Teşekkürler sorunu çözdüm :)





< Bu mesaj bu kişi tarafından değiştirildi wolfbeeci -- 14 Ekim 2013; 21:27:29 >
Bu mesaja 2 cevap geldi.

Bu mesajda bahsedilenler: @cllyldrm
C
12 yıl
Yarbay

quote:

Orijinalden alıntı: wolfbeeci

1. resim === http://s1310.hizliresim.com/1g/g/tl9by.jpg
2. resim === http://o1310.hizliresim.com/1g/g/tl9cb.jpg

2. matrisin 3. sütun 3.satırında 2 yazıyor 4 yazmama rağmen 4.satırdada 1 yazıyor gene 4 yazmama rağmen

Acaba diyorum benim compiler'ımda mı bir sorun var dev-c++ kullanıyorum sizin önerebileceğiniz başka, kullanımı kolay compiler var mıdır yada siz ne kullanıyorsunuz

bu arada ilgilendiğiniz için teşekkür ederim.



EDIT:

int dizi[100][100], dizi1[100][100], sonuc[100][100] // sizin yazdığınız
int a,b,i,j,dizi[a] ,dizi1[a] ,sonuc[a] ; //benim yazdığım

sanırım [a] yazdığım için bu sorun ortaya çıktı.

Teşekkürler sorunu çözdüm :)

Sorunu cozdugune sevindim. Kodu biraz degistirmistim. Kendin bulman daha iyi oldu.

Derleyici olarak mingw kullaniyorum ama visual studio u Tavsiye ederim. En azindan hatalari gormende yardimci olur.



< Bu ileti mobil sürüm kullanılarak atıldı >

C
12 yıl
Binbaşı

arkadaşlar birisi bana yardım etsin tek tek girilen 4 basamaklı sayının değerlerini alt alta yazan program dedi hocam ama modülle yapılacak


Bu mesaja 1 cevap geldi.
C
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: cevelry

arkadaşlar birisi bana yardım etsin tek tek girilen 4 basamaklı sayının değerlerini alt alta yazan program dedi hocam ama modülle yapılacak


Modulus operatörünü kast ettiğini anlamam 5 dk. mı aldı Geri kalanını anlamakla uğraşamıycam.



E
12 yıl
Yüzbaşı

Hocam "breadth-first traversal" hakkında biliyorsan eğer bilgi verebilirmisin



F
12 yıl
Binbaşı

quote:

Orijinalden alıntı: ahmet_k06

Arkadaşlar matris çarpma işlemimde sorun var... cevabı yazarken tek sütunu yazıyor ve diğerlerini 0 olarak alıyor...Sorun nedir acaba?
#include<stdio.h> 
#include<conio.h>

int main()
{
printf("\tMATRIS CARPMA PROGRAMI'NA HOSGELDINIZ\n");
printf("\t************AHMET KUSLULAR************\n\n");

int matris1[50][50], matris2[50][50];//MATRİS BOYUTUNUN MAKSİMUM DEĞERİDİR

//int toplam[50][50];
int carpim[50][50];

int i,j,k,toplam,sat,sut,sut2;


printf("1.MATRISIN SATIR SAYISI..: ");
scanf("%d",&sat);
printf("1.MATRISIN SUTUN SAYISI..: ");
scanf("%d",&sut);
printf("\n2.MATRISIN SATIR SAYISI..: %d",sut);
printf("\n2.MATRISIN SUTUN SAYISI..: ");
scanf("%d",&sut2);

printf("\n----------------------------------\n1. MATRISIN DEGERLERINI GIRINIZ..:(%d x %d)\n----------------------------------\n",sat,sut);
for(i=0;i<sat;i++)//GIRDIGIMIZ DEĞİŞKENLERE GÖRE SATIR SAYISI BELİRLENİR
{
for(j=0;j<sut;j++)//GIRDIGIMIZ DEĞİŞKENLERE GÖRE SÜTUN SAYISI BELİRLENİR
{
printf("[%d].SATIR [%d].SUTUN.: ",i+1,j+1);//BURADA SATIR:SUTUN DEGERLERININ GIRILMESİ ISTENİYOR
scanf("%d",&matris1[i][j]);
}

}


printf("\n----------------------------------\n2. MATRISIN DEGERLERINI GIRINIZ..:(%d x %d)\n----------------------------------\n",sut,sut2);

for(i=0;i<sut;i++)//GIRDIGIMIZ DEĞİŞKENLERE GÖRE SATIR SAYISINIZ BELİRLENİR
{
for(j=0;j<sut2;j++)//GIRDIGIMIZ DEĞİŞKENLERE GÖRE SÜTUN SAYISINIZ BELİRLENİR
{
printf("[%d].SATIR [%d].SUTUN.: ",i+1,j+1);//BURADA SATIR:SUTUN DEGERLERININ GIRILMESİ ISTENİYOR
scanf("%d",&matris2[i][j]);
}

}


for(i=0;i<sat;i++)
{
for(j=0;j<sut;j++)
{ toplam=0;
for(k=0;k<50;k++)
toplam += matris1[i][k]*matris2[k][j];

carpim[i][j] = toplam;
}
}
printf("\n****************************\n MATRIS CARPIMININ SONUCU..:(%d x %d)\n****************************\n",sat,sut2);
for(i=0;i<sat;i++)
{
for(j=0;j<sut2;j++)
{ printf("%d ",carpim[i][j]);}
printf("\n\n");}





getch();
}


conio.h asla kullanmamalısın. Platforma bağlıdır ve ben öğretmen olsam bunu yazana sıfır puan verirdim.



F
12 yıl
Binbaşı

quote:

Orijinalden alıntı: wolfbeeci

1. resim === http://s1310.hizliresim.com/1g/g/tl9by.jpg
2. resim === http://o1310.hizliresim.com/1g/g/tl9cb.jpg

2. matrisin 3. sütun 3.satırında 2 yazıyor 4 yazmama rağmen 4.satırdada 1 yazıyor gene 4 yazmama rağmen

Acaba diyorum benim compiler'ımda mı bir sorun var dev-c++ kullanıyorum sizin önerebileceğiniz başka, kullanımı kolay compiler var mıdır yada siz ne kullanıyorsunuz

bu arada ilgilendiğiniz için teşekkür ederim.



EDIT:

int dizi[100][100], dizi1[100][100], sonuc[100][100] // sizin yazdığınız
int a,b,i,j,dizi[a] ,dizi1[a] ,sonuc[a] ; //benim yazdığım

sanırım [a] yazdığım için bu sorun ortaya çıktı.

Teşekkürler sorunu çözdüm :)

Ödev değilse bir proje için yapıyorsan belleği dinamik olarak yönet. Stack olarak verme.


Bu mesaja 2 cevap geldi.
F
12 yıl
Binbaşı

Bir bilgi vereyim, printf fonksiyonunu şu şekilde asla kullanmayın:

printf("Merhaba dünya!");

Bu güvenli değildir, karakter sayısını bile istemez.

şöyle kullanın

printf("%s","Merhaba");

bu da çok güvenli değildir.

Bu yüzden bunu kullanın:

cguvenlik = (char*)calloc/*malloc burada olmamalı*/(100,sizeof(char)); //Daha da fazla güvenli
snprintf(cguvenlik,50,"Version: %s",SURUM);puts(cguvenlik);

En güvenli yöntemlerden birisi en son verdiğimdir.
Malloc un kullanılmamasının sebebi ise ayrılan bellekte eğer son karakter \0(null sonlandırıcı) değilse puts konsol ekranına istenmeyen karakterleri yazabilir. Veya kullanırsanız snprintf fonksiyonundaki karakter sayısını yazdıracağınız karakter dizisinin karakter sayısıyla eşit tutun.



W
12 yıl
Onbaşı

quote:

Orijinalden alıntı: Fatih54102

quote:

Orijinalden alıntı: wolfbeeci

1. resim === http://s1310.hizliresim.com/1g/g/tl9by.jpg
2. resim === http://o1310.hizliresim.com/1g/g/tl9cb.jpg

2. matrisin 3. sütun 3.satırında 2 yazıyor 4 yazmama rağmen 4.satırdada 1 yazıyor gene 4 yazmama rağmen

Acaba diyorum benim compiler'ımda mı bir sorun var dev-c++ kullanıyorum sizin önerebileceğiniz başka, kullanımı kolay compiler var mıdır yada siz ne kullanıyorsunuz

bu arada ilgilendiğiniz için teşekkür ederim.



EDIT:

int dizi[100][100], dizi1[100][100], sonuc[100][100] // sizin yazdığınız
int a,b,i,j,dizi[a] ,dizi1[a] ,sonuc[a] ; //benim yazdığım

sanırım [a] yazdığım için bu sorun ortaya çıktı.

Teşekkürler sorunu çözdüm :)

Ödev değilse bir proje için yapıyorsan belleği dinamik olarak yönet. Stack olarak verme.

Ödev :) sağ ol tavsiye için ben araştırıyım onu bi :)



-
12 yıl
Yüzbaşı

@Fatih54102
printf() neden güvenli değil acaba biraz teknik olarak konuyu açabilir misiniz?

snprintf() için malloc/calloc ile ayırdığınız yeri free ile boşaltmanız gerekmez mi?





< Bu mesaj bu kişi tarafından değiştirildi -Source- -- 17 Ekim 2013; 19:35:53 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Fatih54102
F
12 yıl
Binbaşı

quote:

Orijinalden alıntı: -Source-

@Fatih54102
printf() neden güvenli değil acaba biraz teknik olarak konuyu açabilir misiniz?

snprintf() için malloc/calloc ile ayırdığınız yeri free ile boşaltmanız gerekmez mi?

gerekir boşaltmak onu da C++ ise destructor içinde eğer c ise de çıkıştan önce yaparlar diye özellikle belirtmedim.

printf güvenli olmamasının sebebi overflow olabilir ve bir sorun oluşsa bile uygulama çalışmaya devam eder.
---
printf("%s",carr);
bunu dememin sebebi ise daha farklı, aslında bu da güvensiz ama düz printf kullanımı kadar değil.

düz printf kullanımının ilk güvenlik sebebini yukarıda belirttim. Diğer sebep (daha çok sebebi var):

örneğin şöyle bir şey yazdırmak gerekiyor:

char test[] = "Yuzde isareti su sekilde gosterilir: %";
bunu yazdırmak istersek
sizin bildiğiniz yoldan
printf(&test[0]);
veya
printf(test);

ama çıktıda % işareti argüman olarak algılanıp va_list e katılır (printf fonksiyonunda) ve bozuk karakter/farklı karakter gösterilir % yerine
Çıktı: "Yuzde isareti su sekilde gosterilir: "

Bu tür sorunların olmaması için en doğru yollardan biri yukarıda dediğim hafıza ayırma metodu.
Eğer yapamazsanız aşağıdaki doğru olmayan yöntemi kullanın. (Projelerde asla printf ve scanf kullanılmamalı zaten)
printf("%s",test);

böyle yapınca çıktı doğru düzgün olarak verilir.

İşte bu tür saçmalıklarla programcıların uğraşmaması için C++ cout adındaki güvenli fonksiyonunu getirdi.
---
Ayrıca Scanf ve Gets kullanılması çok daha büyük sorun(Microsoft nispeten daha fazla güvenli _s fonksiyonlarını geliştirdi. Ancak microsoft ya işte sadece msvc ile çalışır bu yüzden platform/derleyici bağımsız değildir. Kullanmayın) . Gerekirse fgets veya bahsettiğim güvenli yöntemi kullanın.

Günümüz projelerinde zaten bu gibi nedenlerden ve yeniliklerden dolayı C++ kullanılır. Ama C++ daha üst seviye dildir ve asm den daha uzaktır. Bu yüzden hızı yavaş ve kapladığı boyut da büyüktür, bu yüzden gömülü sistemlerde vb. tercih edilmez.


Yani kısaca ödevler haricinde proje yapacaksanız bilgisayarlar için C++ kullanın.


Bu mesaja 2 cevap geldi.
-
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: Fatih54102
printf güvenli olmamasının sebebi overflow olabilir ve bir sorun oluşsa bile uygulama çalışmaya devam eder.

Overflow olmasına bir örnek verebilir misiniz?

quote:

Orijinalden alıntı: Fatih54102
örneğin şöyle bir şey yazdırmak gerekiyor:

char test[] = "Yuzde isareti su sekilde gosterilir: %";
bunu yazdırmak istersek
sizin bildiğiniz yoldan
printf(&test[0]);
veya
printf(test);

ama çıktıda % işareti argüman olarak algılanıp va_list e katılır (printf fonksiyonunda) ve bozuk karakter/farklı karakter gösterilir % yerine
Çıktı: "Yuzde isareti su sekilde gosterilir: "

Burada ki sorun dilden çok kullanıcıdan kaynaklı bence. Orada bir daha % kullanması gerekirdi. Ama dediğiniz gibi güvenli değil.

Ayrıca yukarıda verdiğiniz kodu biraz değiştirdim ama yine çözüm olmadı % li verdiğiniz örnek için.
 
char surum[] = "aaa %";
char *cguvenlik = (char*)calloc(100,sizeof(char)); //Daha da fazla güvenli
snprintf(cguvenlik,50,surum);
puts(cguvenlik);


Bu kod çıktı olarak "aaa " sonucunu vermektedir. Yani snprintf'in pek faydası olmadı % için :(.


quote:

Orijinalden alıntı: Fatih54102
İşte bu tür saçmalıklarla programcıların uğraşmaması için C++ cout adındaki güvenli fonksiyonunu getirdi.

cout'da sandığımız kadar güvenli değil aslında. Bunun içinsehttp://ddili.org/makale/neden_d.html buradaki makalenin "Biraz haksızca sataşarak merhaba" bölümünü okumanızı tavsiye ederim.

Küçük bir not: C ile sadece burada sorular sorulduğu zaman kod yazıyorum. Onun dışında ki projelerimde C++ ile geliştirme yapıyorum.


Bu mesaja 1 cevap geldi.
4
12 yıl
Teğmen

quote:

Orijinalden alıntı: Fatih54102
İşte bu tür saçmalıklarla programcıların uğraşmaması için C++ cout adındaki güvenli fonksiyonunu getirdi.


cout bir fonksiyon değildir.


Bu mesaja 2 cevap geldi.
F
12 yıl
Binbaşı

quote:

Orijinalden alıntı: 4kalan

quote:

Orijinalden alıntı: Fatih54102
İşte bu tür saçmalıklarla programcıların uğraşmaması için C++ cout adındaki güvenli fonksiyonunu getirdi.


cout bir fonksiyon değildir.

Evet değil oradaki fonksiyon dememin sebebi bitshift operatörü ile operatör overloading yapılınca içinde bulunduran bir fonksiyonu çağırıp fonksiyon gibi işlev yapmasındandır. Bu tür ayrıntıları yazsam mesajlar çok uzun oluyor o yüzden.



G
12 yıl
Yarbay

quote:

Orijinalden alıntı: 4kalan

quote:

Orijinalden alıntı: Fatih54102
İşte bu tür saçmalıklarla programcıların uğraşmaması için C++ cout adındaki güvenli fonksiyonunu getirdi.


cout bir fonksiyon değildir.

Tek hata bu olsa cevap vermeye gerek yoktu ama...

printf("Merhaba dünya!");
Bunun hiçbir şekilde dezavantajı yok. Stringlerin sonunda zaten null olduğu için karakter sayısını almasına da gerek yok.

printf("%s","Merhaba");
Bu da aynı şey. Kaç karakter olduğunu zaten bilir. Bunların stack overflow ile hiçbir alakası yok. Bu örnekteki stringler zaten ne stack ta ne de heap te tutulur.

Stringleri çalışma zamanında kopyalamanın ne gibi bir avantajı var? Ya da malloc neden olmaz, neden calloc? String kopyalayan fonksiyonlar zaten otomatik olarak null ekler. Belleği önceden sıfırlamaya gerek yok.

Bunun tek isnistası karakterleri tek tek koplayalarken ortaya çıkar. O zaman null u manuel olarak eklemek gerekir. Bu benim sık sık yaptığım birşey mesela.

O güvenli denilen fonksiyonlar illegal olan bölgeye yazmıyor ama kopyalamayı eksik bırakıyor. Bunun neresi güvenli?

% ile yazılan format karakterlerini hatasız yazdığınız sürece ve yeterli belleği ayırdığınız sürece güvensiz diye birşey yoktur. C ile program yazıyorsanız bu tür şeylere dikkat edeceksiniz. C' nin felsefesi budur. Ne kadar yetki o kadar sorumluluk. Python değil bu.

Son olarak c++ c' den yavaş değil. Makina diline uzak ta değil.





< Bu mesaj bu kişi tarafından değiştirildi Guest-BF8E9B238 -- 17 Ekim 2013; 21:27:31 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Fatih54102
F
12 yıl
Binbaşı

quote:

Orijinalden alıntı: -Source-

quote:

Orijinalden alıntı: Fatih54102
printf güvenli olmamasının sebebi overflow olabilir ve bir sorun oluşsa bile uygulama çalışmaya devam eder.

Overflow olmasına bir örnek verebilir misiniz?

quote:

Orijinalden alıntı: Fatih54102
örneğin şöyle bir şey yazdırmak gerekiyor:

char test[] = "Yuzde isareti su sekilde gosterilir: %";
bunu yazdırmak istersek
sizin bildiğiniz yoldan
printf(&test[0]);
veya
printf(test);

ama çıktıda % işareti argüman olarak algılanıp va_list e katılır (printf fonksiyonunda) ve bozuk karakter/farklı karakter gösterilir % yerine
Çıktı: "Yuzde isareti su sekilde gosterilir: "

Burada ki sorun dilden çok kullanıcıdan kaynaklı bence. Orada bir daha % kullanması gerekirdi. Ama dediğiniz gibi güvenli değil.

Ayrıca yukarıda verdiğiniz kodu biraz değiştirdim ama yine çözüm olmadı % li verdiğiniz örnek için.
 
char surum[] = "aaa %";
char *cguvenlik = (char*)calloc(100,sizeof(char)); //Daha da fazla güvenli
snprintf(cguvenlik,50,surum);
puts(cguvenlik);


Bu kod çıktı olarak "aaa " sonucunu vermektedir. Yani snprintf'in pek faydası olmadı % için :(.


quote:

Orijinalden alıntı: Fatih54102
İşte bu tür saçmalıklarla programcıların uğraşmaması için C++ cout adındaki güvenli fonksiyonunu getirdi.

cout'da sandığımız kadar güvenli değil aslında. Bunun içinsehttp://ddili.org/makale/neden_d.html buradaki makalenin "Biraz haksızca sataşarak merhaba" bölümünü okumanızı tavsiye ederim.

Küçük bir not: C ile sadece burada sorular sorulduğu zaman kod yazıyorum. Onun dışında ki projelerimde C++ ile geliştirme yapıyorum.

En basit örneği buffer overflow. Araştırırsanız bulacaksınız.
---
O bölümü biraz değiştirirsek mesela:
(pseudo kod)

 
kullanıcıdan şu metni girmeyi iste: "bu bir yüzde işaretidir %"
printf ile istediğin metini yazdır.


yani burada da kullanıcı nın %% gibi bir şey kullanması lazım. Bu da uygun değil.
---
char surum[] = "aaa %";
char *cguvenlik = (char*)calloc(100,sizeof(char)); //Daha da fazla güvenli
snprintf(cguvenlik,50,surum);
puts(cguvenlik);

aslında

snprintf(cguvenlik,50,"%s",surum);

gibi kullanılması lazım. Ama zaten fazla işlem gücü gerektiren bu blokta bunu da ekleyince daha fazla süre geçeceği için kullanmamıştım. Bu gibi durumlarda ikinci belirttiğim kullanılmalı.
---
O makaleyi okumuştum, D gerçekten güzel bir dil fakat C++ bile makine diline bu kadar uzakken D çok daha uzak.
Makaleyi yazan adam doğru söylemiş fakat düşük seviyeye inince hata göstermemesinin bile iyi sonuçları olabiliyor. Yani burada kontrolü bence programcıya bırakmak lazım. (projelerde bu işi kolaylaştırmak için küçük bir template fonksiyon hazırlanabilir)
Ama sonuçta evet stdout için writeln , cout a göre daha uygun (Eğer d dili kullanılıyorsa) .


Bu mesaja 1 cevap geldi.
A
12 yıl
Onbaşı

arkadaşlar c de girdiğim değerleri yer değiştirecek bir programa ihtiyacım var...
mesela....: 1 2 3 4 5 diye girdik..ekrana....:5 4 3 2 1 diye yazacak...Basit program istiyorum..yardımcı olursanız sevinirim...


Bu mesaja 1 cevap geldi.
F
12 yıl
Binbaşı

quote:

Orijinalden alıntı: elektro_gadget

quote:

Orijinalden alıntı: 4kalan

quote:

Orijinalden alıntı: Fatih54102
İşte bu tür saçmalıklarla programcıların uğraşmaması için C++ cout adındaki güvenli fonksiyonunu getirdi.


cout bir fonksiyon değildir.

Tek hata bu olsa cevap vermeye gerek yoktu ama...

printf("Merhaba dünya!");
Bunun hiçbir şekilde dezavantajı yok. Stringlerin sonunda zaten null olduğu için karakter sayısını almasına da gerek yok.

printf("%s","Merhaba");
Bu da aynı şey. Kaç karakter olduğunu zaten bilir. Bunların stack overflow ile hiçbir alakası yok. Bu örnekteki stringler zaten ne stack ta ne de heap te tutulur.

Stringleri çalışma zamanında kopyalamanın ne gibi bir avantajı var? Ya da malloc neden olmaz, neden calloc? String kopyalayan fonksiyonlar zaten otomatik olarak null ekler. Belleği önceden sıfırlamaya gerek yok.

Bunun tek isnistası karakterleri tek tek koplayalarken ortaya çıkar. O zaman null u manuel olarak eklemek gerekir. Bu benim sık sık yaptığım birşey mesela.

O güvenli denilen fonksiyonlar illegal olan bölgeye yazmıyor ama kopyalamayı eksik bırakıyor. Bunun neresi güvenli?

% ile yazılan format karakterlerini hatasız yazdığınız sürece ve yeterli belleği ayırdığınız sürece güvensiz diye birşey yoktur. C ile program yazıyorsanız bu tür şeylere dikkat edeceksiniz. C' nin felsefesi budur. Ne kadar yetki o kadar sorumluluk. Python değil bu.

Son olarak c++ c' den yavaş değil.

printf("Merhaba dünya!");
Bunun hiçbir şekilde dezavantajı yok. Stringlerin sonunda zaten null olduğu için karakter sayısını almasına da gerek yok.

Normal şartlarda evet, fakat birisi disassemble edip büyük bir projenizi 1 dakika içinde değiştirdiğinde bu sözleri bir daha edemezsiniz.
---
printf("%s","Merhaba");
Bu da aynı şey. Kaç karakter olduğunu zaten bilir. Bunların stack overflow ile hiçbir alakası yok. Bu örnekteki stringler zaten ne stack ta ne de heap te tutulur.

evet bilir fakat yukarıdakinden güvenlidir.
overflow için ise isterseniz örneğini verebilirim.
---
Stringleri çalışma zamanında kopyalamanın ne gibi bir avantajı var? Ya da malloc neden olmaz, neden calloc? String kopyalayan fonksiyonlar zaten otomatik olarak null ekler. Belleği önceden sıfırlamaya gerek yok.

daha fazla güvenlik için.
şöyle yapılsa:

cguvenlik = (char*)calloc(15,sizeof(char));
snprintf(cguvenlik,8,"test123");puts(cguvenlik);

test123\0#temiz alan#

adam ileriki aşamalarda memcpy(mesela iki str ve karakterbirleştirip , veya binary bloğunu temiz alana taşımak isteyebilir) ile bir şeyler taşıyabilir bu durumda sonlandırıcı eklemekle uğraşmamak için zaten hazır olan sonlandırıcılar kullanılır. daha sonra adresi bellekte tutmadan basit bir for döngüsü ile attığı şeylere ulaşabilir)
malloc da kullanılabilir fakat bu sefer de pozisyon tutmak gerekir.
---
O güvenli denilen fonksiyonlar illegal olan bölgeye yazmıyor ama kopyalamayı eksik bırakıyor. Bunun neresi güvenli?

Burada anlatılmak isteneni anlamadım.
---
% ile yazılan format karakterlerini hatasız yazdığınız sürece ve yeterli belleği ayırdığınız sürece güvensiz diye birşey yoktur. C ile program yazıyorsanız bu tür şeylere dikkat edeceksiniz. C' nin felsefesi budur. Ne kadar yetki o kadar sorumluluk. Python değil bu.

işlemci kullanıcıdan aldığı her metindeki % leri %% olarak mı değiştirsin? Ekstra zaman kaybı.
diğer arkadaşa verdiğim cevabı okuyun.
---
Son olarak c++ c' den yavaş değil.

C++ ın çoğu fonksiyonu C den daha yavaştır.
C++ ı C++ yapan özellikleri çıkartınca zaten hız farkı kalmaz.