Struct Array Read函数将所有数组值更改为最近的输入-C
其中:ssize是数组的输入大小,student是全局声明的结构,read_stud是我用于在数组中读取的函数 打印出来时,s[count].first会给我正确的名字,但s[0]及其后的所有值也是相同的名字,而不是以前输入的值。它正在将结构值更改为我最近的输入Struct Array Read函数将所有数组值更改为最近的输入-C,c,arrays,struct,C,Arrays,Struct,其中:ssize是数组的输入大小,student是全局声明的结构,read_stud是我用于在数组中读取的函数 打印出来时,s[count].first会给我正确的名字,但s[0]及其后的所有值也是相同的名字,而不是以前输入的值。它正在将结构值更改为我最近的输入 struct student //this struct is global { int number; char *first ; char *last ; }; struct student read_st
struct student //this struct is global
{
int number;
char *first ;
char *last ;
};
struct student read_stud (int number, char *first , char *last) //my read_stud function
{
struct student s;
s.number = number;
s.first = first;
s.last = last;
return s;
}
这是在int main中,我使用函数s=callocssize,sizeof struct student
非常衷心地感谢能为我解决这个问题的人
struct student *read_stud(int number, char *first , char *last) // my read_stud function
{
struct student *s;
s = malloc(sizeof(struct student));
s->number = number;
s->first = strdup(first);
s->last = strdup(last);
return s;
}
大体上:
char first[256], last[256]; /* 256 as example*/
struct student *s = calloc(ssize, sizeof (struct student *));
大体上:
char first[256], last[256]; /* 256 as example*/
struct student *s = calloc(ssize, sizeof (struct student *));
您需要为学生结构中的名字和姓氏提供存储 如果知道它们的最大长度,请在结构中使用字符数组
#define MAX_NAME_CHARS (20)
struct student //this struct is global
{
int number;
char first[MAX_NAME_CHARS];
char last[MAX_NAME_CHARS];
};
否则,malloc字符串并记住稍后释放它们
struct student read_stud (int number, char *first , char *last) //my read_stud function
{
struct student s;
s.number = number;
s.first = strdup(first);
s.last = strdup(last);
return s;
}
您需要为学生结构中的名字和姓氏提供存储 如果知道它们的最大长度,请在结构中使用字符数组
#define MAX_NAME_CHARS (20)
struct student //this struct is global
{
int number;
char first[MAX_NAME_CHARS];
char last[MAX_NAME_CHARS];
};
否则,malloc字符串并记住稍后释放它们
struct student read_stud (int number, char *first , char *last) //my read_stud function
{
struct student s;
s.number = number;
s.first = strdup(first);
s.last = strdup(last);
return s;
}
现行守则:
for (count = 0; count < ssize ; ++count)
{
printf ("Enter student number, name and last name: \n");
scanf ("%d %s %s", &number, &first, &last);/*1*/
s[count] = read_stud (number, first, last);
}
struct student read_stud (int number, char *first , char *last) //my read_stud function
{
struct student s;
s.number = number;
s.first = first;/*2*/
s.last = last; /*3*/
return s;
}
不要忘记释放所有分配的内存。为简洁起见,省略了错误检查。现有代码:
for (count = 0; count < ssize ; ++count)
{
printf ("Enter student number, name and last name: \n");
scanf ("%d %s %s", &number, &first, &last);/*1*/
s[count] = read_stud (number, first, last);
}
struct student read_stud (int number, char *first , char *last) //my read_stud function
{
struct student s;
s.number = number;
s.first = first;/*2*/
s.last = last; /*3*/
return s;
}
不要忘记释放所有分配的内存。为简洁起见,省略了错误检查。扫描中的问题重新检查以获取字符数组。。不需要&您应该检查scanf是否返回了三个值,这样,如果有人给出了一个条目,例如发音为Paul Sinjun的“391 Paul St.John”,您不会因为scanf在John中找不到数字而导致其他所有学生都有相同的数字和名称。始终检查读取操作!scanf中存在问题,请重新检查以获取字符数组。。不需要&您应该检查scanf是否返回了三个值,这样,如果有人给出了一个条目,例如发音为Paul Sinjun的“391 Paul St.John”,您不会因为scanf在John中找不到数字而导致其他所有学生都有相同的数字和名称。始终检查读取操作!我不明白这为什么会被否决。这是一个合理的答案,正确地确保为值的副本分配空间,这是问题的症结所在。我们可以在显式malloc上进行错误检查,等等。我不明白这为什么会被否决。这是一个合理的答案,正确地确保为值的副本分配空间,这是问题的症结所在。我们可以对显式malloc等进行错误检查。