面试题答案
一键面试#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct {
char *name;
int age;
float score;
} Student;
// 创建学生结构体数组的函数
Student* createStudentArray(int n) {
Student *students = (Student*)malloc(n * sizeof(Student));
if (students == NULL) {
printf("内存分配失败\n");
return NULL;
}
for (int i = 0; i < n; i++) {
char tempName[50];
printf("请输入第 %d 个学生的姓名: ", i + 1);
scanf("%s", tempName);
students[i].name = (char*)malloc(strlen(tempName) + 1);
if (students[i].name == NULL) {
printf("内存分配失败\n");
// 释放之前分配的内存
for (int j = 0; j < i; j++) {
free(students[j].name);
}
free(students);
return NULL;
}
strcpy(students[i].name, tempName);
printf("请输入第 %d 个学生的年龄: ", i + 1);
scanf("%d", &students[i].age);
printf("请输入第 %d 个学生的成绩: ", i + 1);
scanf("%f", &students[i].score);
}
return students;
}
// 释放内存的函数
void freeStudentArray(Student *students, int n) {
for (int i = 0; i < n; i++) {
free(students[i].name);
}
free(students);
}
你可以使用以下方式调用这个函数:
int main() {
int n;
printf("请输入学生数量: ");
scanf("%d", &n);
Student *students = createStudentArray(n);
if (students != NULL) {
// 在这里可以对students数组进行操作
for (int i = 0; i < n; i++) {
printf("学生 %d: 姓名 %s, 年龄 %d, 成绩 %.2f\n", i + 1, students[i].name, students[i].age, students[i].score);
}
freeStudentArray(students, n);
}
return 0;
}
代码说明
- 定义结构体:使用
typedef struct
定义了Student
结构体,包含name
(动态分配的字符串)、age
(年龄)和score
(成绩)。 createStudentArray
函数:- 使用
malloc
分配n
个Student
结构体的内存空间,如果分配失败,输出错误信息并返回NULL
。 - 循环为每个学生分配
name
的内存空间,读取姓名、年龄和成绩。如果name
内存分配失败,释放之前分配的内存并返回NULL
。
- 使用
freeStudentArray
函数:释放每个学生name
的内存空间,然后释放整个students
数组的内存。main
函数:读取学生数量n
,调用createStudentArray
创建学生数组,对数组进行操作后,调用freeStudentArray
释放内存。