通过数组对象从结构初始化字符数组的问题
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;
}
我在通过结构对象初始化结构中的字符数组时遇到问题
#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;
}