Segmentation Fault Vermesinin Sebebi Ne? (C Dili)
-
Yeni öğreniyorum,alttan alın..
Stringin uzunlugunu basıcam ekrana ama segm. fault veriyor:
#include
int main ()
{
char string[10]="bilgisayar";
printf("%d",str_len(string[10]));
return 0;
}
int str_len(char string[])
{
int i;
for(i=0;string[i]!='\0';i++)
return i;
} -
DeaD_BY bunu yazdı:
-----------------------------Yeni öğreniyorum,alttan alın..
Stringin uzunlugunu basıcam ekrana ama segm. fault veriyor:
#include
int main ()
{
char string[10]="bilgisayar";
printf("%d",str_len(string[10]));
return 0;
}
int str_len(char string[])
{
int i;
for(i=0;string[i]!='\0';i++)
return i;
}
------------------------------ Hocam string[10] demişsin , bu 10 elemanlı bir char dizisi anlamına gelir. "bilgisayar" kelimesinde ise 10 harf gözükse de C de tüm stringlerin sonunda '\0' karakteri yani null terminator bulunur yani ona da bir yer ayırman gerekir. Dolayısıyla diziyi 11 elemanlı tanımla.
- İkincisi str_len(string[10]) şeklinde kullanamazsın, beklenen parametre zaten array direk ismiyle kullanmalısın yani str_len(string) şeklinde.
Ayrıca en üste include koymuşsun boş amacın ne anlayamadım
-
j4x bunu yazdı:
-----------------------------DeaD_BY bunu yazdı:
-----------------------------Yeni öğreniyorum,alttan alın..
Stringin uzunlugunu basıcam ekrana ama segm. fault veriyor:
#include
int main ()
{
char string[10]="bilgisayar";
printf("%d",str_len(string[10]));
return 0;
}
int str_len(char string[])
{
int i;
for(i=0;string[i]!='\0';i++)
return i;
}
------------------------------ Hocam string[10] demişsin , bu 10 elemanlı bir char dizisi anlamına gelir. "bilgisayar" kelimesinde ise 10 harf gözükse de C de tüm stringlerin sonunda '\0' karakteri yani null terminator bulunur yani ona da bir yer ayırman gerekir. Dolayısıyla diziyi 11 elemanlı tanımla.
- İkincisi str_len(string[10]) şeklinde kullanamazsın, beklenen parametre zaten array direk ismiyle kullanmalısın yani str_len(string) şeklinde.
Ayrıca en üste include koymuşsun boş amacın ne anlayamadım
-----------------------------çok teşekkürler hocam..include <stdio.h> koymustum ama silmisim yanlıslıkla sanırım..teşekkür ettim.
-
hocam şimdide 0 basıyo ekrana :S
#include <stdio.h>
int main ()
{
char string[]="bilgisayar";
printf("%d",str_len(string));
return 0;
}
int str_len(char string[])
{
int i;
for(i=0;string[i]!='\0';i++)
return i;
} -
#include <stdio.h>
int main ()
{
char string[10]="bilgisayar\0";
printf("%d",str_len(string));
return 0;
}
int str_len(char *string)
{
int i;
for(i=0;string[i]!='\0';i++)
return i;
}derlemeden yazdım ama bak bakalım bu çalışıyor mu ?
-
DeaD_BY bunu yazdı:
-----------------------------hocam şimdide 0 basıyo ekrana :S
#include
int main ()
{
char string[]="bilgisayar";
printf("%d",str_len(string));
return 0;
}
int str_len(char string[])
{
int i;
for(i=0;string[i]!='\0';i++)
return i;
}
-----------------------------Hata şu, for un altına return i yazmişsin her forda return yani. İlk forda return edince 0 çıkıyor. yapman gereken şey for(i=0;string[i]!='\0';i++) bu satırın sonuna bi ; koymak yani içi boş for.
-
j4x bunu yazdı:
-----------------------------DeaD_BY bunu yazdı:
-----------------------------hocam şimdide 0 basıyo ekrana :S
#include
int main ()
{
char string[]="bilgisayar";
printf("%d",str_len(string));
return 0;
}
int str_len(char string[])
{
int i;
for(i=0;string[i]!='\0';i++)
return i;
}
-----------------------------Hata şu, for un altına return i yazmişsin her forda return yani. İlk forda return edince 0 çıkıyor. yapman gereken şey for(i=0;string[i]!='\0';i++) bu satırın sonuna bi ; koymak yani içi boş for.
-----------------------------eyvallah hocam teşekkürler,insan acemi olunca göremiyor işte napıcaksın :)
