Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Struct Array Read函数将所有数组值更改为最近的输入-C_C_Arrays_Struct - Fatal编程技术网

Struct Array Read函数将所有数组值更改为最近的输入-C

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

其中:ssize是数组的输入大小,student是全局声明的结构,read_stud是我用于在数组中读取的函数

打印出来时,s[count].first会给我正确的名字,但s[0]及其后的所有值也是相同的名字,而不是以前输入的值。它正在将结构值更改为我最近的输入

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等进行错误检查。