2016-04-08 20 views
0

yapıya atanırken, Linux ortamında ansi C'de programlama yapıyorum, gcc derleyici kullanıyorum. Aşağıdaki koduC programlama, segmentasyon hatası, tamsayıda

#define USER_IN_LEN 15 
#define EXTRA_SPACES 2 
#define DELIMS " ,\n" 

//define the sruct 
typedef struct position 
{ 
    int x; 
    int y; 
} Position; 


char choice[USER_IN_LEN + EXTRA_SPACES]; 
//define pointers for strtok and strtol 
char *tok; 
char *end; 

//create pointer o type Position 
Position *position; 
//get user input with fgets 
fgets(choice, USER_IN_LEN, stdin); 

//tokenize 
tok = strtok(choice, DELIMS); 
tok = strtok(NULL, DELIMS); 
position->x = (int)strtol(tok, &end, 0); //error, segmentation fault 
tok = strtok(NULL, DELIMS); 
position->y = (int)strtol(tok, &end, 0);//error, segmentation fault 

Temelde programı bazı değerler için kullanıcı girişi alır ve pozisyon yapı içinde saklamak, çevrimiçi biraz araştırma yaptım ve bu position->y = int kullanabilirsiniz öğrendim, ama neden değil var strtol ile çalışıyor mu? Hata ayıklayıcısını çalıştırdım ve

+2

'pozisyonu * position' bir başlatılmamış göstericidir. Bunu yapmak için, bir yerde geçerli, muhtemelen 'malloc' hafızasıyla işaret etmelisiniz. –

cevap

1

position'un bir yapının işaretçisidir. Hiçbir zaman position'u hiçbir değere ayarlamadınız, bu yüzden herhangi bir yere işaret ediyor olabilir! - Yani tanımlanmamış davranışları çağırıyorsunuz.

Hızlı çözüm:

Position instance; 
position = &instance; 
+0

Bu işe yarıyor! x ve y değerlerini nasıl yazdırabilirim? Bir Java arka planından geldim ve çok fazla –

+0

işaretçisiyle uğraşmadım. C yazdırmak normal yolu printf ("% d,% d \ n", position-> x, position-> y); " – John3136

+0

Cheers dostum, hepsi işe yaradı :) –