我正在尝试为一些样本部件设置一个结构数组,然后需要输出到文件中。它似乎工作正常,但只打印前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;
}
答案 0 :(得分:4)
struct stock someStock[3];
声明一个3 struct stock
的数组,但你使用的是4。括号中的数字是元素的数量,而不是最高的有效索引。声明
struct stock someStock[4];
答案 1 :(得分: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);
->
被称为结构指针运算符,它取消引用指针并访问一个成员,与 {em}的.
相对结构成员运算符,当你有一个指针时,也需要间接运算符 *
。
答案 2 :(得分:0)
struct stock someStock [3];意味着你在数组中有三个元素,所以数组索引可以是0到2所以strcpy(someStock [3] .name,“Tires”);因为3超出范围数组索引
而导致程序崩溃