C compiler segmentation fault hatası

KOUsoftware

Hectopat
Katılım
1 Nisan 2020
Mesajlar
157
Yer
İstanbul
Daha fazla  
Cinsiyet
Erkek
Meslek
Öğrenci
C compiler segmentation fault hatası'nın sebebi nedir?
 

Dosya Ekleri

  • Screenshot_2022-09-01-17-34-32-417_com.android.chrome.jpg
    Screenshot_2022-09-01-17-34-32-417_com.android.chrome.jpg
    68,9 KB · Görüntüleme: 91
Son düzenleyen: Moderatör:
Kullandiginiz il degiskeni string turunde degil scanf("%s") ile deger atayamazsiniz atamaya calistiginda string sonundaki null karakteri ariyor bulamadigi icin segfault aliyorsunuz.
Alacaginiz degeri bir string degiskene aktarip `strcmp` fonksiyonu ile karsilastirmalisiniz.

C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define sehirmacro(sehir) {sehir,#sehir}

enum sehirler {
  hatali,
  adana,
  adiyaman,
  afyonkarahisar,
  agri,
  amasya,
  ankara,
  antalya,
  aydin,
  artvin,
  balikesir
};
static const struct sehirmap{
  enum sehirler enumerated;
  char *sehir;
} sehirmap[]={
  sehirmacro(hatali),
  sehirmacro(adana),
  sehirmacro(adiyaman),
  sehirmacro(afyonkarahisar),
  sehirmacro(agri),
  sehirmacro(amasya),
  sehirmacro(ankara),
  sehirmacro(antalya),
  sehirmacro(aydin),
  sehirmacro(artvin),
  sehirmacro(balikesir)
};
int main (int argc, char *argv[])
{
  char input[256]={1};
  scanf("%s",input);
  for (int i = 0; i < sizeof(sehirmap)/sizeof(*sehirmap) ; i++) {
    if (strcmp(input,sehirmap[i].sehir)==0){
      printf("%d\n",sehirmap[i].enumerated);
      return 0;
    }
  }
  printf("hatali\n");
  return 0;
}
Ornek olarak boyle bir kod kullanabilirsin, bu arada aciklamam kismen yanlisti segfaultun sebebi scanf'in il degiskeninden sonraki hafizaya yazmaya calismasi bu yuzden 3 karaktere (3 byte'a) kadar girisler segfaulta sebep olmayacaktir
 
Son düzenleme:

Yeni konular

Geri
Yukarı