2016-04-08 13 views
0

Linux環境でansi Cでプログラミングしていますが、gccコンパイラを使用しています。 は、私は次のコードstructにintメンバーを整数に代入するときのCプログラミングのセグメンテーションエラー

#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 

は、基本的にはプログラムがいくつかの値のためのユーザー入力を取得し、位置構造体に格納している、私はオンラインいくつかの研究を行なったし、私はこのposition->y = intを使用することができますが分かったが、なぜではありませんしていますそれはstrtolとここで働いていますか?私はデバッガを走らせたが、あまり役に立たなかった。

+2

'ポジション*のposition'が初期化されていないポインタです。逆参照したい場合は、おそらく 'malloc'のメモリによって、どこか有効なものにする必要があります。 –

答えて

1

positionは構造体へのポインタである。あなたは決してpositionを任意の値に設定しないので、どこでも指している可能性があります!つまり、未定義の動作を呼び出しています。

クイックフィックス:

Position instance; 
position = &instance; 
+0

ありがとうございます!私はどのようにxとyの値を印刷しますか?私はJavaの背景から来て、多くのポインタを扱っていません –

+0

Cで印刷する通常の方法は 'printf("%d、%d \ n "、position-> x、position-> y);' – John3136

+0

仲間、すべてうまくいった:) –