2013-07-19 72 views
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; 

該錯誤消息我得到的是「未處理的異常在... in ... exe:0xC0000005:訪問衝突寫入位置0xccccccc「。

有誰知道爲什麼?

+0

那是什麼你會不擇手段地使用指針......指針只能指向它所指向的東西。 –

+0

該文件的內容是什麼?爲什麼說if語句有空代碼塊? – Antonio

+2

「跑步時迷戀」意味着在試圖趕上巴士時墜入愛河。你正在尋找的詞是「崩潰」。 – 2013-07-19 22:01:52

回答

2

您鍵入:

typedef struct student{...}*stu; 

這是一個指向struct,你剛纔宣佈的20個球沒有任何一個數組回來了,你不知道這些指針指向,最有可能不是一個有效的區域記憶。

聲明這樣說:

struct student source[ 20 ]; 

或者使用動態分配的,但我想沒有必要在你的情況。

+0

編譯器生氣時,我試了一下:\ –

+0

@OmerAndrewSanMiguel你含糊不清,請編輯該問題添加您的嘗試和編譯器錯誤。 –

+1

它應該是'struct student source [20]',不是嗎? – alk

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]; 
相關問題