17:55:27 **** Incremental Build of configuration Debug for project baslangic ****
Info: Internal Builder is used for build
gcc -O0 -g3 -Wall -c -fmessage-length=0 -o denee.o "..\\denee.c"
..\denee.c: 'cakmainput' işlevinde:
..\denee.c:8:9: UYARI: returning 'char *' from a function with return type 'char' makes integer from pointer without a cast [-Wint-conversion]
return data;
^~~~
..\denee.c:8:9: UYARI: işlev yerel değişkenin adresi ile dönüyor [-Wreturn-local-addr]
gcc -o baslangic.exe denee.o sayi.o
17:55:28 Build Failed. 2 errors, 0 warnings. (took 928ms)
Amacım python’da bulunan input fonksiyonunu yazmaktı. Yardımlarınızı bekliyorum.
Fonksiyonunuzun içinde oluşturduğunuz data değişkenini geri döndürmeye çalışıyorsunuz ama fonksiyon bittiğinde data değişkeni otomatik olarak silinir, çünkü stackde tanımlanıyor. Bu yüzden malloc kullanmanız lazım. Böyle bir şeye ihtiyacımız kalmasın diye de scanf fonksiyonu sonucu yazacağı değişkeni argüman olarak alır zaten.
char ile char[] farkli turler. char tek bir karakteri temsil ediyor. Bu fonksiyonun bu haliyle tek bir karakter dondurmesi lazim, 'x' veya 'y' gibi.
text’e boyut verilmesinin hic bir manasi yok, char text[] de olabilirdi. Kafa karistirmamasi acisindan char *text tercih ediyoruz. (Boyutu hic bir zaman bilinmedigi icin array’den cok pointer’a benziyor.)
Bu kullanim hatali. Dogrusu printf("%s", text) veya puts(text).
Dizi/dize scan ederken boyut belirtmek lazim (%39s). Su an 39 karakterden fazla girildigi anda buffer overflow oluyor.
main fonksiyonunun aldigi parametreleri belirtmekte fayda var: void veya int argc, char *argv[].
main fonksiyonu int donduruyor. 0 veya EXIT_SUCCESS mesela.
mallocNULL dondurebilir, kontrol etmek lazim. sizeof(char) her zaman 1, ama arada ben de kullaniyorum. Bu durumda sizeof(*data) derdim.
Memory leak var; malloc’a karsilik free lazim.