【问题标题】:Copying string from file to array of structures crashes将字符串从文件复制到结构数组崩溃
【发布时间】:2013-07-19 07:58:57
【问题描述】:

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

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”。

有人知道为什么吗?

【问题讨论】:

  • 这就是你不顾一切地使用指针所得到的……指针只有它所指向的东西才好。
  • 文件的内容是什么?为什么使用空代码块的 if 语句?
  • “跑步时暗恋”是指在赶公共汽车时坠入爱河。您要查找的词是“crash”。

标签: c visual-studio-2010


【解决方案1】:

你输入了:

typedef struct student{...}*stu;

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

这样声明:

struct student source[ 20 ];

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

【讨论】:

  • @OmerAndrewSanMiguel 您含糊不清,请编辑问题以添加您的尝试和编译器错误。
  • 应该是struct student source[20],不是吗?
【解决方案2】:

只需删除 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];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多