在C中部分复制结构

时间:2013-12-05 04:46:12

标签: c struct

嘿,我真的很陌生,我已经坐了很长一段时间,试图学习使用结构的最基本的东西。

我现在正在尝试将我的结构的一部分复制到另一个结构中,所以我可以按照我认为合适的方式重新排列它们。这是我到目前为止所提出的,我已经多次修改代码试图让它工作,所以如果你能解释我应该如何改变代码以及为什么我会非常高兴。

到目前为止我想出的是:

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

struct fruits temp, stock[] = {
  {"Apples", 10}
  {"Pears", 15}
  {"Bananas", 12}
}

从我到目前为止所理解的(我可能非常错误)我创建了两个具有相同内容的结构?

我现在要做的只是在第一个和第三个元素上切换位置(带有12个香蕉的10个苹果)

这就是我被困的地方。 我尝试了很多方法

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));
                        .
                        .
                        .

2 个答案:

答案 0 :(得分:1)

C中的数组从0开始编制索引,因此数组的第一个元素是元素0,第三个元素是元素2.另外,temp不是数组,所以不要使用括号表示法与temp

temp = stock[0];
stock[0] = stock[2];
stock[2] = temp;

答案 1 :(得分:0)

你有这个:

struct fruits temp, stock[] = {
    {"Apples", 10},
    {"Pears", 15},
    {"Bananas", 12},
};

这声明了两个变量。第二个是stock,是三个结构的数组;三者中的每一个都是struct fruits类型。第一个tempstruct 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编译器将发出警告。然后,通过重新使用FLEN temp,您将得到两个长度相同的数组。

如果你真的想用相同的东西初始化两个数组,我建议你这样做:

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

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