将字符串从文件复制到结构数组崩溃

时间:2013-07-19 21:58:06

标签: c visual-studio-2010

此代码在运行时编译但崩溃。

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:访问冲突写入位置0xccccccc”。

有谁知道为什么?

2 个答案:

答案 0 :(得分:2)

您输入了:

typedef struct student{...}*stu;

它是一个指向struct的指针,你刚刚声明了一个没有任何东西的20个指针的数组,你不知道这些指针指向哪里,很可能不是有效的内存区域。

以这种方式声明:

struct student source[ 20 ];

或者使用动态分配,但我想在您的情况下没有必要。

答案 1 :(得分:0)

只需在stu。

之前删除'*'即可

说明: 你混合了两件事。

的结构声明
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];