C语言中的简单结构-需要帮助

zaq34kh6  于 2022-12-02  发布在  其他
关注(0)|答案(3)|浏览(144)

我不知道我在C语言中的结构哪里出了问题。你们能告诉我我做错了什么吗?什么是最好的方法?

#include<stdio.h>
#include<string.h>
typedef struct
{
char *name;
float gpa;
int courseNo;
} STUDENT;

void createStudent(STUDENT s, char *n, float gpa, int course);

int main(void)
{
struct STUDENT s;
createStudent(s, "Dummy", 3.8f, 203);
printf("Name = %s\n", s.name);
printf("GPA = %3.1f\n", s.gpa);
printf("Course No. = %d\n", s.courseNo);
return 0;
}

void createStudent(STUDENT s, char *n, float gpa, int course)
{
  strcpy(s.name, n);
  s.gpa = gpa;
  s.courseNo = course;
 }
mitkmikd

mitkmikd1#

您是按值而不是按引用传递STUDENT对象,因此在createStudent函数中对其所做的任何更改都不会影响s。请改为传递一个指针。
通常,当你传递一个变量给一个函数时,变量的值会被复制到相应的参数中。然而,这个参数变量是一个独立于你传递的变量的变量。通过使用指针,你实际上是在告诉函数你的变量的 * 身份 *,而不仅仅是它的值。
正如@simonc所指出的,代码中还有一个问题。当你在函数中调用strcpy时,你要写入的指针(s.name)是未初始化的,这意味着当你通过strcpy赋值给它的数据时,你是在覆盖随机内存,这只是在自找麻烦。你应该在写入之前用malloc分配内存。
下面是完整的代码:

void createStudent(STUDENT *s, char *n, float gpa, int course)
{ 
    s->name = malloc(strlen(n) + 1); // +1 for null terminator
    strcpy(s->name, n);
    s->gpa = gpa;
    s->courseNo = course;
}

然后这样称呼它:

createStudent (&s, other args ... )

请注意,完成以下操作后,应取消分配内存:

free(s.name);

但只有当您不打算再使用该对象时才可以使用。

14ifxucb

14ifxucb2#

请尝试以下操作:

#include <stdio.h>
#include<string.h>
#include <stdlib.h>

typedef struct
{
    char *name;
    float gpa;
    int courseNo;
} STUDENT;

void createStudent(STUDENT* s, char *n, float gpa, int course);

int main(void)
{
    STUDENT s;
    createStudent(&s, "Dummy", 3.8f, 203);
    printf("Name = %s\n", s.name);
    printf("GPA = %3.1f\n", s.gpa);
    printf("Course No. = %d\n", s.courseNo);
    return 0;
}

void createStudent(STUDENT* s, char *n, float gpa, int course)
{
    s->name = malloc((strlen(n)+1) * sizeof(char));
    strcpy(s->name, n);
    s->gpa = gpa;
    s->courseNo = course;
 }
ru9i0ody

ru9i0ody3#

试试这匹马

#include<stdio.h>
#include<string.h>
struct student
{
char name[20];
int age;
char branch[10];
char gender;
};
struct student s1;
s1.age=18;
strcpy(s1.name:"viraaj");
printf("name of student 1:%s\n",s1.name);
printf("age of student 1:%d\n",s1.age);
return 0;
}

相关问题