如何将结构的char数组复制到结构的另一个char数组?

时间:2020-06-16 18:44:31

标签: c++ arrays structure

#include <iostream>
using namespace std;

struct stud
{
    char name[10];
    int id;
};

int input(stud a[], int size)
{
    for(int i=1; i<=size; i++)
    {
        cout<<"name = ";
        cin>>a[i].name;
        cout<<"id = ";
        cin>>a[i].id;
    }
    cout<<endl;
    return 0;
}
int output(stud a[], int size)
{
    for(int i=1; i<=size; i++)
    {
        cout<<"name = "<<a[i].name<<" ";
        cout<<"id = "<<a[i].id<<" ";
    }
    cout<<endl;
    return 0;
}

int copy(stud a[], stud x[], int size)
{

    for(int i=1; i<=size; i++)
    {
        x[i].name=a[i].name; 
        x[i].id=a[i].id;
    }
    output(x,size);
    cout<<endl;
    return 0;
}

int main()
{

    struct stud s[3], x[3];
    input(s,3);
    output(s,3);
    copy(s,x,3);
    return 0;
}

在此程序中,函数copy x[i].name =a[i].name;中的语句未将内容从1个结构对象复制到另一个。我试图将此语句放入for循环for(int j=1;j<=10;j++) x[i].name[j] =a[i].name[j];中,但仍然无法正常工作。 请提出应该更改的内容或一些替代方法。 为此我会非常感谢。

致谢, umar

2 个答案:

答案 0 :(得分:0)

要么使用循环复制name字段中的每个字符,要么使用strcpy标头中的<cstring>函数。

int copy(stud a[], stud x[], int size) {
    for(int i = 1; i <= size; i++) {
        // for(unsigned j = 0; j < 10; j++) {
        //     x[i].name[j] = a[i].name[j];
        // }
        strcpy(x[i].name, a[i].name);
        x[i].id = a[i].id;
    }
    output(x, size);
    cout << endl;
    return 0;
}

但是由于您已将其标记为c++,因此请考虑使用std::string而不是char数组,除非有特殊原因要使用char数组。在这种情况下,x[i].name = a[i].name可以正常工作,您也可以使用标准的algorithm库进行复制。另外,为您使用std::array而不是原始的C数组“结构数组”可能是更好的选择(不会像常规C数组那样退化为指针)。

答案 1 :(得分:0)

Evrey循环中的单个循环是错误的,因为在C ++中,数组从零开始。所以不是

for(int i=1; i<=size; i++)

代替

for(int i=0; i<size; i++)

您无法通过写入a = b;复制阵列。由于您的数组实际上是字符串,因此有一个内置函数strcpy复制字符串。

strcpy(x[i].name, a[i].name);