对于作业,我必须在C中制作一个由几个互锁功能组成的成绩簿。在没有(太多)头痛的情况下,我已经完成了前几个,但接下来就是这个问题。基本上,我试图获取一个字符串并将其复制到结构内部的二维数组中。我想我已经取得了成功,但是strcpy
一直把这两个迷人的家伙扔在我的脸上:
传递
strcpy
的参数1使得指针来自整数而没有强制转换预期' char * 限制'但是参数的类型为' char'。
这是我的代码。 gb
是指向结构的指针。如果我还没有澄清任何内容,请询问。
int add_assignment(Gradebook *gb, const char assgn[MAX_NUMBER_OF_ASSIGNMENTS]) {
int i, j;
for(i=0; i < MAX_NUMBER_OF_ASSIGNMENTS; i++) {
for(j=0; j < (MAX_NAME_LEN+1); j++) {
strcpy(gb->assignment_names[i][j], assgn);
}
}
return 1;
}
以下是成绩簿结构:
typedef struct gradebook {
int number_of_students;
Students students[MAX_NUMBER_OF_STUDENTS];
int number_of_assignments;
char assignment_names[MAX_NUMBER_OF_ASSIGNMENTS][MAX_NAME_LEN + 1];
int scores[MAX_NUMBER_OF_STUDENTS][MAX_NUMBER_OF_ASSIGNMENTS];
} Gradebook;
答案 0 :(得分:2)
问题在于使用两个循环:
for(i=0; i < MAX_NUMBER_OF_ASSIGNMENTS; i++) {
for(j=0; j < (MAX_NAME_LEN+1); j++) {
strcpy(gb->assignment_names[i][j], assgn);
}
}
内部循环正在尝试将字符串(assgn
)复制到单个char
中。你可能意味着
for(i=0; i < MAX_NUMBER_OF_ASSIGNMENTS; i++) {
strcpy(gb->assignment_names[i], assgn);
}
相反,但这可能不是您想要的,其中一项任务会覆盖整个分配列表。很难说出你在寻找什么逻辑。
答案 1 :(得分:1)
assignment_names[i][j]
是单个字符,而不是字符串。 assignment_names[i]
是一个字符数组,因此您应该复制到该字符数组。你不需要内循环。
int add_assignment(Gradebook *gb, const char assgn[]) {
int i;
for(i=0; i < MAX_NUMBER_OF_ASSIGNMENTS; i++) {
strcpy(gb->assignment_names[i], assgn);
}
return 1;
}