出于什么原因更改此行的位置会在变量中生成不同的赋值

  • 本文关键字:变量 赋值 位置 于什么 c
  • 更新时间 :
  • 英文 :


在下面的两个代码中应该发生完全相同的情况:

struct people {
    char name[25];
    int age;
};
void save() {
    FILE *fp;
    fp = fopen("things.sve", "wb");
    struct people myself;
    strcpy(myself.name, "Bruno Macabeus");
    myself.age = 18;
    struct people fox;
    strcpy(fox.name, "Megan Fox");
    fox.age = 22;
    struct people luffy;
    strcpy(luffy.name, "Monkey D. Luffy");
    luffy.age = 20;
    int totalPeople = 3;
    struct people some[2];
    some[0] = myself;
    some[1] = fox;
    some[2] = luffy;
    fwrite(&totalPeople, sizeof(int), 1, fp);
    //fwrite(some, sizeof(struct people), 3, fp);
    fclose(fp);
}

struct people {
    char name[25];
    int age;
};
void save() {
    FILE *fp;
    fp = fopen("things.sve", "wb");
    struct people myself;
    strcpy(myself.name, "Bruno Macabeus");
    myself.age = 18;
    struct people fox;
    strcpy(fox.name, "Megan Fox");
    fox.age = 22;
    struct people luffy;
    strcpy(luffy.name, "Monkey D. Luffy");
    luffy.age = 20;
    struct people some[2];
    some[0] = myself;
    some[1] = fox;
    some[2] = luffy;
    int totalPeople = 3;
    fwrite(&totalPeople, sizeof(int), 1, fp);
    //fwrite(some, sizeof(struct people), 3, fp);
    fclose(fp);
}

我只更改了变量"totalPeople"的启动时间,但是,当我保存它时,这会产生很大的变化。在第一种情况下,保存一些奇怪的东西:"66 66 79 00"。在第二种情况下,它有效:"03

00 00 00"。

出于什么原因呢?它不应该在两种情况下都有效吗?如何解决这个问题?

您正在越界访问数组some。它是一个由 2 个元素组成的数组,

struct people some[2];

你把它当作它有 3

.
some[2] = luffy;

这会导致未定义的行为。解决方案是不要越界访问数组。

最新更新