我对C编程很陌生,但对其他语言有一些经验。
我目前正在学习结构和指针。我的任务是使用结构和指针对几个名称进行排序。
我开始创建一个结构和一个函数来交换2个名字。当我想用结构声明一个数组时,我无法弄清楚出了什么问题。
这是我编译时遇到的错误:
pr.c:29:22: error: expected expression
studenten[i]={s[i][0],s[i][1],s[i][2]};
^
1 error generated.
以下是一些代码:
#include <stdio.h>
#define MAXSTUDENT 2
typedef struct {
char *firstname;
char *pre;
char *lastname;
} student;
void swap(student **a,student **b) {
student *temp;
temp=*a;
*a=*b;
*b=temp;
}
int main () {
int i;
char *s[MAXSTUDENT][3]={{"John"," the ","Way"},{"John"," ","Smith"}};
student *studenten[MAXSTUDENT];
for (i=0;i<MAXSTUDENT;i++) {
studenten[i]={s[i][0],s[i][1],s[i][2]};
}
printf("%s%s%s - %s%s%s\n",studenten[0]->firstname,studenten[0]->pre,studenten[0]->lastname,studenten[1]->firstname,studenten[1]->pre,studenten[1]->lastname);
swap(&studenten[0],&studenten[1]);
printf("%s%s%s - %s%s%s\n",studenten[0]->firstname,studenten[0]->pre,studenten[0]->lastname,studenten[1]->firstname,studenten[1]->pre,studenten[1]->lastname);
}
答案 0 :(得分:3)
这不符合您的预期:
studenten[i] = {s[i][0],s[i][1],s[i][2]};
成员初始化列表仅在声明中有效,不允许常规作业使用初始化列表。你必须手动完成,并自己分配内存:
for (i=0;i<MAXSTUDENT;i++) {
studenten[i] = malloc(sizeof(*studenten[i]));
if (studenten[i] == NULL) {
/* Handle malloc error... */
}
studenten[i]->firstname = s[i][0];
studenten[i]->pre = s[i][1];
studenten[i]->lastname = s[i][2];
}
在任何一种情况下,请注意,对于任何大于或等于2的s[i][j]
,0
为i
- 您只需初始化s[0]
和s[1]
。< / p>