0

このコードはコンパイルされますが、実行中にクラッシュします。

typedef struct student{
    char name[ 20 ];
    char last[ 20 ];
    unsigned long int ID;
    char email[ 20 ];
    char BA[ 4 ]; 
} *stu;

stu source[ 20 ];

for( int i=0; i<11 ;i++ )  //copy from file to array
{
    if( fscanf( f1 ,"%s%s%u%s%s", &( source[ i ]->name ), &( source[ i ]->last ), &( source[ i ]->ID ), &( source[ i ]->email ), &( source[ i ]->BA ) ) == EOF );
}

これはクラッシュ時に表示されるコードで、この行で停止します (ポップアップ ウィンドウの名前は input.c です)。

#ifndef _UNICODE
    *(char *)pointer = (char)ch;  /* stops on this line */
    pointer = (char *)pointer + 1;

表示されるエラー メッセージは、「...exe の ... で未処理の例外: 0xC0000005: アクセス違反が場所 0xcccccccc を書き込んでいます」です。

誰かが理由を知っていますか?

4

2 に答える 2

0

stu の前の「*」を削除するだけです。

説明 : 2 つのものを混ぜ合わせました。による構造の宣言

struct student{
   char name[ 20 ];
   char last[ 20 ];
   unsigned long int ID;
   char email[ 20 ];
   char BA[ 4 ]; 
};

作成中の場合は、次のように変数を宣言する必要があります。

struct student var;

そしてそれの名前を変更する:

typedef struct student newName;

この場合、次のように変数を宣言する必要があります。

newName variable;

だからあなたのコードで:

typedef struct student{
   char name[ 20 ];
   char last[ 20 ];
   unsigned long int ID;
   char email[ 20 ];
   char BA[ 4 ]; 
} *stu;

次のように stu の前に「*」を削除する必要があります。

typedef struct student{
   char name[ 20 ];
   char last[ 20 ];
   unsigned long int ID;
   char email[ 20 ];
   char BA[ 4 ]; 
} stu;

次に、変数を次のように宣言します。

stu source[20];
于 2013-07-20T00:28:06.447 に答える