Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将数组结构写入文件_C_Arrays_Struct - Fatal编程技术网

C 将数组结构写入文件

C 将数组结构写入文件,c,arrays,struct,C,Arrays,Struct,我正在尝试为几个示例部件设置一个结构数组,然后这些部件需要输出到一个文件中。它似乎工作正常,但只会打印前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]

我正在尝试为几个示例部件设置一个结构数组,然后这些部件需要输出到一个文件中。它似乎工作正常,但只会打印前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;

}
声明一个包含3个struct stock的数组,但使用的是4个。括号中的数字是元素数,而不是最高有效索引。申报

struct stock someStock[4];
声明一个包含3个struct stock的数组,但使用的是4个。括号中的数字是元素数,而不是最高有效索引。申报

struct stock someStock[4];

struct stock someStock[3];表示数组中有三个元素,因此数组索引可以是0到2,因此strcpysomeStock[3]。名称,轮胎;正在崩溃您的程序,因为3超出数组索引的范围

struct stock someStock[3];表示数组中有三个元素,因此数组索引可以是0到2,因此strcpysomeStock[3]。名称,轮胎;正在崩溃您的程序,因为3超出了数组索引的范围,正如其他人所说:

struct stock someStock[4];
其他一些提示:

struct stock *ptr = &someStock[0];
相当于:

struct stock *ptr = someStock;
fprintf(file_ptr, "%s %d %d\n", ptr->name, ptr->partNum, ptr->quantity);
正如Daniel指出的,这是因为数组名的计算结果是指向该上下文中第一个元素的指针

以及:

相当于:

struct stock *ptr = someStock;
fprintf(file_ptr, "%s %d %d\n", ptr->name, ptr->partNum, ptr->quantity);
->被称为结构指针操作符,它在一个函数中解除对指针的引用并访问一个成员,这与函数相反。它是结构成员运算符,因此当您有指针时也需要间接运算符*。

正如其他人所说:

struct stock someStock[4];
其他一些提示:

struct stock *ptr = &someStock[0];
相当于:

struct stock *ptr = someStock;
fprintf(file_ptr, "%s %d %d\n", ptr->name, ptr->partNum, ptr->quantity);
正如Daniel指出的,这是因为数组名的计算结果是指向该上下文中第一个元素的指针

以及:

相当于:

struct stock *ptr = someStock;
fprintf(file_ptr, "%s %d %d\n", ptr->name, ptr->partNum, ptr->quantity);

->被称为结构指针操作符,它在一个函数中解除对指针的引用并访问一个成员,这与函数相反。这是结构成员运算符,因此当您有指针时也需要间接运算符*。

@DanielFischer谢谢您,Daniel,我已更正。已经更新了。现在修复了拼写错误的等价物,我真的很高兴;谢谢,这真的很有帮助。@DanielFisher谢谢你,Daniel,我改正了。已经更新了。现在修复了拼写错误的等价物,我真的很高兴;谢谢,这真的很有帮助。