通过数组对象从结构初始化字符数组的问题

issue in intialising character array from the structure through an array object

我在通过结构对象初始化结构中的字符数组时遇到问题

#include <iostream>
    #include <string.h>
    using namespace std;
    struct emp
    {
        int age;
        char name[10];
    };
    int main()
    {
        struct emp v[2];
    
    List item
    
        v[0].age = 9;
        v[0].name[] = "name1"; <-this is where i am getting error
        v[1].age = 10;
        v[1].name[]= "name2"; <-this is where i am getting error
        for (int i = 0; i < 2; i++)
        {
            cout << v[i].age << " " << v[i].name<<endl;
        }
    
        return 0;
    }

对于初学者来说,至少有一个错字

    v[0].name[] = "name1"; <-this is where i am getting error
            ^^^^ 
    v[1].name[]= "name2"; <-this is where i am getting error
            ^^^^

数组没有赋值运算符。所以这些赋值语句

v[0].name[] = "name1";
v[1].name[]= "name2"; 

在句法和语义上都不正确。

您可以在声明数组时初始化数组的元素。

例如

struct emp v[2] =
{
    { 9, "name1" },
    { 10, "name2" }
};

否则您可以使用标准字符串函数strcpy。例如

#include <cstring>

//...
v[0].age = 9;
strcpy( v[0].name, "name1" );
v[1].age = 10;
strcpy( v[1].name, "name2" );

另一种方法是使用class std::string 代替字符数组。例如

#include <string>

// ...
struct emp
{
    int age;
    std::string name;
};

int main()
{
    struct emp v[2];

    v[0].age = 9;
    v[0].name = "name1";
    v[1].age = 10;
    v[1].name= "name2";
    for (int i = 0; i < 2; i++)
    {
        cout << v[i].age << " " << v[i].name<<endl;
    }

    return 0;
}

请注意,您可以使用基于范围的 for 循环代替普通的 for 循环。

例如

for ( const auto &item : v )
{
    cout << item.age << " " << item.name << endl;
}

在现代 C++ 中:

#include <iostream>
#include <string>
#include <array>

struct emp {
  int age;
  std::string name;
};

int main() {
  std::array<emp, 2> v{{{9, "name1"}, {10, "name2"}}};

  for (const auto& item : v) {
    std::cout << item.age << " " << item.name << std::endl;
  }

  return 0;
}