我不知道我在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;
}
3条答案
按热度按时间mitkmikd1#
您是按值而不是按引用传递
STUDENT
对象,因此在createStudent
函数中对其所做的任何更改都不会影响s
。请改为传递一个指针。通常,当你传递一个变量给一个函数时,变量的值会被复制到相应的参数中。然而,这个参数变量是一个独立于你传递的变量的变量。通过使用指针,你实际上是在告诉函数你的变量的 * 身份 *,而不仅仅是它的值。
正如@simonc所指出的,代码中还有一个问题。当你在函数中调用
strcpy
时,你要写入的指针(s.name
)是未初始化的,这意味着当你通过strcpy
赋值给它的数据时,你是在覆盖随机内存,这只是在自找麻烦。你应该在写入之前用malloc
分配内存。下面是完整的代码:
然后这样称呼它:
请注意,完成以下操作后,应取消分配内存:
但只有当您不打算再使用该对象时才可以使用。
14ifxucb2#
请尝试以下操作:
ru9i0ody3#
试试这匹马