在C中复制结构

时间:2013-11-01 19:28:34

标签: c struct

我有一个将结构复制到另一个的问题..所以你应该帮助我:) 我想写出最年轻的人,

# include <stdio.h>

# include <string.h>

struct person {
    char name[16], surname[21];
    int age;
};

int main (){
    struct person x[3], min;
    int i, min_element;
    for(i=0;i<3;i++){
        gets(x[i].name);
        gets(x[i].surname);
        scanf("%d", &x[i].age);
        fflush(stdin);
    }
    min_element=x[0].age;
    for(i=0;i<3;i++){
        if(min_element>x[i].age)
            min=x[i]; // here i want to copy structure 
    }
    puts(min.name);
    puts(min.surname);
    printf("%d", min.age);
    return 0;
}

谢谢你...但另一个问题是屏幕上的文字..它就像: F☻ Bô!小号 2686740

3 个答案:

答案 0 :(得分:2)

你的结构有价值语义,即它们没有指针,所以按值复制会做正确的事情,所以你可以简单地说:

myperson1 = myperson2;

答案 1 :(得分:1)

问题可能是当你找到一个较低的元素时你没有改变min_element,所以你总是在测试x [0] .age。你可能想这样做:

if (x[i].age < min_element) {
    min = x[i];
    min_element = x[i].age;
}

对于复制结构,您还可以使用memcpy

memcpy(&min, &x[i], sizeof(min));

http://linux.die.net/man/3/memcpy

哪会使代码

if (x[i].age < min_element) {
    memcpy(&min, &x[i], sizeof(min));
    min_element = x[i].age;
}

答案 2 :(得分:0)

由于您的结构仅包含纯数据,因此您的复制完全有效且合理:

min=x[i];

其中x[i]min都属于struct person类型。但是,您的逻辑中似乎有错误。如果要查找最小age的结构,请尝试:

min_element=x[0].age;
for(i=0;i<3;i++){
    if(min_element > x[i].age) {
        min=x[i];
        min_element = min.age;      // <-- update new minimum
    }
}

另请注意,gets非常危险且已被“弃用”,请改用fgetsscanf

scanf("%15s", x[i].name);
scanf("%20s", x[i].surname);