2012-11-21 86 views
1

我試圖建立結構數組幾樣件,然後需要輸出到文件中。它似乎工作正常,但只會打印前3個部分,然後崩潰。寫一個陣列結構到文件

#include "stdio.h" 

main() 
{ 
struct stock{ 
    char name[20]; 
    int partNum; 
    int quantity; 
}; 

struct stock someStock[3]; 

strcpy(someStock[0].name, "License plate"); 
someStock[0].partNum = 1234; 
someStock[0].quantity= 4; 

strcpy(someStock[1].name, "Head lamp"); 
someStock[1].partNum = 1111; 
someStock[1].quantity= 2; 

strcpy(someStock[2].name, "Rear wiper"); 
someStock[2].partNum = 2222; 
someStock[2].quantity= 6; 

strcpy(someStock[3].name, "Tyres"); 
someStock[3].partNum = 3333; 
someStock[3].quantity= 10; 

struct stock *ptr = &someStock[0]; 
int i; 
FILE *file_ptr; 
file_ptr = fopen("stock.dat", "w"); 

for(i=0;i<4;i++) 
{ 
    fprintf(file_ptr, "%s %d %d\n",(*ptr).name,(*ptr).partNum, (*ptr).quantity); 
    ptr++; 
} 

fclose(file_ptr); 
return 0; 

} 

回答

1

正如有人說:

struct stock someStock[4]; 

其他一些提示您:

struct stock *ptr = &someStock[0]; 

等同於:

struct stock *ptr = someStock; 

正如Daniel指出的那樣,這是因爲數組名稱的計算結果是指向該上下文中第一個元素的指針。

和:

fprintf(file_ptr, "%s %d %d\n",(*ptr).name,(*ptr).partNum, (*ptr).quantity); 

相當於:

fprintf(file_ptr, "%s %d %d\n", ptr->name, ptr->partNum, ptr->quantity); 

->稱爲結構指針操作者,它取消引用一個指針和訪問部件都在同一個,作爲反對所述.這是結構構件操作者等需要間接運算符*以及當你有一個指針時。

+0

@DanielFischer謝謝丹尼爾,我站得更正了。已更新。 – weston

+0

現在修復「等效」的拼寫錯誤,我真的很開心;) –

+0

@DanielFischer完成! – weston

4
struct stock someStock[3]; 

宣佈的3 struct stock一個數組,但你用四個。括號中的數字是元素的數量,而不是最高的有效索引。聲明

struct stock someStock[4]; 
0

struct stock someStock [3];意味着你在數組中有三個元素,所以數組索引可以從0到2,所以strcpy(someStock [3] .name,「Tires」);崩潰程序爲3超出範圍數組索引的