【发布时间】:2018-05-16 16:51:19
【问题描述】:
在 C 中,数组不可赋值,但在第 36 行(我也评论过的行)中,我为数组 name 赋值,而没有出现任何错误。为什么会这样?另外,如果您检查我的 freeStudents 功能是否正常工作,除了这个令人费解的事情之外,我真的很感激。谢谢你们的时间!
#include <stdio.h>
#include <stdlib.h>
#define MAX_NAME 50
struct students
{
char name[MAX_NAME];
float average;
};
void storeStudents(struct students *lst, int n);
void printStudents(struct students *lst, int n);
void freeStudents(struct students *lst);
int main(void)
{
int n;
printf("How many students you wanna store? ");
scanf("%d", &n);
struct students *list;
list = (struct students *)malloc(n*sizeof(struct students));
storeStudents(list,n);
printStudents(list,n);
freeStudents(list);
return 0;
}
void storeStudents(struct students *lst, int n)
{
int i;
for(i=0;i<n;i++)
{
printf("Name of student: ");
scanf("%s", &(lst[i].name)); //In C arrays are not assignable, so why is this line working?
printf("Average of student: ");
scanf("%f", &(lst[i].average));
}
printf("\n");
}
void printStudents(struct students *lst, int n)
{
int i;
for(i=0;i<n;i++)
{
printf("Name: %s\tAverage: %.2f", lst[i].name, lst[i].average);
printf("\n");
}
}
void freeStudents(struct students *lst)
{
free(lst);
}
【问题讨论】:
-
如果你启用编译器警告,你会看到真正发生了什么:ideone.com/7JPJFH
-
Oliver Charlesworth 代码块编译器没有给我任何警告/错误..
-
“在 C 中的数组不可赋值”是什么意思?数组包含的内容显然是可变的,因此您可以为它的元素分配一个新值。您在哪里读到“数组不可分配”?
-
@LasseVågsætherKarlsen - 数组确实是不可赋值的,因为如果
a是数组类型,你不能做a = b;。 -
Lasse Vågsæther Karlsen,我在 stackoverflow 帖子中读到数组不可在 c 中分配(最佳投票答案)。看看:stackoverflow.com/questions/1292586/…
标签: c