部分复制C中的结构

部分复制C中的结构,c,struct,C,Struct,嘿,我对c真的很陌生,我已经在这里坐了很长一段时间了,现在我正在努力学习关于使用结构的最基本的东西 我现在正试图将我的结构的一部分复制到另一个结构中,以便可以根据需要重新排列它们。这就是我到目前为止所想到的,我已经多次修改代码,试图让它工作,所以如果你能解释我应该如何修改代码以及为什么要修改代码,我将非常感激 到目前为止,我得出的结论是: struct fruits { char name[20] int in_stock; } struct fruits temp, stock[]

嘿,我对c真的很陌生,我已经在这里坐了很长一段时间了,现在我正在努力学习关于使用结构的最基本的东西

我现在正试图将我的结构的一部分复制到另一个结构中,以便可以根据需要重新排列它们。这就是我到目前为止所想到的,我已经多次修改代码,试图让它工作,所以如果你能解释我应该如何修改代码以及为什么要修改代码,我将非常感激

到目前为止,我得出的结论是:

struct fruits {
  char name[20]
  int in_stock;
}

struct fruits temp, stock[] = {
  {"Apples", 10}
  {"Pears", 15}
  {"Bananas", 12}
}
根据我迄今为止的理解(我很可能错了),我创建了两个具有相同内容的结构

我现在要做的是简单地切换第一个和第三个元素(10个苹果和12个香蕉)的位置

这就是我被卡住的地方。 我尝试过多种方法

temp[1] = stock[1];
stock[1] = stock[3];
stock[j + 1] = temp[j];
或者用memcpy

memcpy(&temp[1], &stock[1], sizeof(fruits));
memcpy(&stock[1], &stock[3], sizeof(fruits));
memcpy(&stock[3], &temp[1], sizeof(fruits));
还尝试移动单个元素

memcpy(&temp[1].name, &stock[1].name, sizeof(fruits));
memcpy(&temp[1].in_stock, &stock[1].in_stock, sizeof(fruits));
                        .
                        .
                        .

C中的数组从0开始索引,因此数组的第一个元素是元素0,第三个元素是元素2。另外,
temp
不是数组,因此不要将括号符号与
temp
一起使用:

temp = stock[0];
stock[0] = stock[2];
stock[2] = temp;
你有这个:

struct fruits temp, stock[] = {
    {"Apples", 10},
    {"Pears", 15},
    {"Bananas", 12},
};
这声明了两个变量。第二个是
stock
,它是一个由三个结构组成的数组;这三种类型都是
struct fruits
。第一个是
temp
,它是
struct fruits
类型的结构

因此,当您尝试索引
temp
时,它不起作用

下面是获得两个长度相同的数组的简单方法

#define FLEN 3  /* length of fruits array */

struct fruits stock[FLEN] = {
    {"Apples", 10},
    {"Pears", 15},
    {"Bananas", 12},
};
struct fruits temp[FLEN];
对于
stock
,如果您没有提供3个值,C编译器将警告您。然后,通过对
temp
重新使用
FLEN
,可以得到两个长度相同的数组

#define FLEN 3  /* length of fruits array */

struct fruits stock[FLEN] = {
    {"Apples", 10},
    {"Pears", 15},
    {"Bananas", 12},
};
struct fruits temp[FLEN];
如果您真的想用相同的东西初始化两个数组,我建议您:

#define FRUIT_VALUES \
        {"Apples", 10}, \
        {"Pears", 15}, \
        {"Bananas", 12},

struct fruits stock[] = { FRUIT_VALUES };
struct fruits temp[] = { FRUIT_VALUES };

你遇到了什么问题?从我看来,这似乎是索引的问题:
C
索引从
0
开始,而不是
1
@RoneyMichael从我看来,这个问题是对声明在C中如何工作的误解。这似乎是一个合法的初学者问题,我不知道为什么这个问题会被降低到-2。