我的代码是:
void main() {
person student[10];
student[0].names[0] = 'C';
student[0].names[1] = 'a';
student[0].names[2] = 'm';
student[0].names[3] = 'i';
student[0].ages = 16;
student[0].sex[0] = 'F';
student[0].sex[1] = 'e';
student[0].sex[2] = 'm';
student[0].sex[3] = 'a';
student[0].sex[4] = 'l';
student[0].sex[5] = 'e';
student[0].month = 8;
student[0].day = 2;
student[0].year = 1993;
}
Run Code Online (Sandbox Code Playgroud)
所有的"学生"都有下划线说,表达必须是可修改的左值.我怎样才能解决这个问题?
persontypedef struct person
{
char names[20][10];
char sex[6][10];
int ages[10];
int month[10];
int day[10];
int year[10];
} person;
Run Code Online (Sandbox Code Playgroud)
你说你有:
typedef struct person {
char names[20][10];
char sex[6][10];
int ages[10];
int month[10];
int day[10];
int year[10];
} person;
Run Code Online (Sandbox Code Playgroud)
没有必要[10].你已经在person student[10]宣言中有了这个,这是适当的地方[10].删除无关的数组:
typedef struct person {
char name[20];
char sex[6];
int age;
int month;
int day;
int year;
} person;
Run Code Online (Sandbox Code Playgroud)
你的字符串也不是以null结尾的.在C字符串中,需要'\0'在末尾有一个额外的字符来指示字符串结尾的位置.例如,您的姓名分配应该是:
student[0].name[0] = 'C';
student[0].name[1] = 'a';
student[0].name[2] = 'm';
student[0].name[3] = 'i';
student[0].name[4] = '\0';
Run Code Online (Sandbox Code Playgroud)
实际上,有一种更简单的方法来分配字符串,而不是一次一个字符.该strcpy的功能将一气呵成复制整个字符串:
strcpy(student[0].name, "Cami");
Run Code Online (Sandbox Code Playgroud)
或者,最简单的选择是使用C++中可用的字符串类.它使字符串处理比操作字符数组的C方式更容易.使用字符串类,您的代码将如下所示:
// Modified struct declaration.
typedef struct person {
std::string name;
std::string sex;
int age;
// ...
} person;
// Modified assignment.
student[0].name = "Cami";
Run Code Online (Sandbox Code Playgroud)