[英]return a struct pointer from a function with return type char*
我必須創建一個 function ,給定一個學生 ID,它將查看指向結構成員(學生)的指針數組並將一個 char 指針返回給該學生。 如果找不到學生,則 function 應返回 null。
下面的 function 原型由教授提供,無法更改,查找 id function 我相信是正確的,但我不知道如果返回類型是 char* 和學生,我應該如何將指針返回給學生類型是結構。 如果有人能指出我正確的方向(沒有雙關語),我將不勝感激。
char * find_id(int id, struct student * arr[], int n)
結構定義
struct student {
int id;
char * name;
};
創建學生 function
struct student * create_student(int id, char * name){
struct student *ptr = (struct student*) malloc( sizeof(struct student));
if(ptr==NULL){
return NULL;
}
ptr->id = id;
ptr->name = malloc((strlen(name)+1)* sizeof(char));
if(ptr->name == NULL){
free(ptr);
return NULL;
}
strcpy(ptr->name, name);
return ptr;
}
我的 find_id function
char * find_id(int id, struct student * arr[], int n){
for(int i = 0; i<n;i++){
if(arr[i]->id == id){
return arr[i];
}
else{
return NULL;
}
}
}
主function
int main(){
char name1[]="ALI";
char name2[]="MOE";
char name3[]="AYA";
char name4[]="RANA";
char name5[]="BOB";
int id1 = 10000;
int id2 = 10001;
int id3 = 10002;
int id4 = 10003;
int id5 = 10004;
struct student *student[4];
student[0] = create_student(id1,name1);
student[1] = create_student(id2,name2);
student[2] = create_student(id3,name3);
student[3] = create_student(id4,name4);
student[4] = create_student(id5,name5);
for(int i=0; i<5;i++){
free_student(student[i]);
}
assert(strcmp(find_id(10000,student,5),"ALI")==0);
}
通過這部分:
if(arr[i]->id == id) { return arr[i]; }
您的 find_id() 實現不返回 char * 但 struct student *;
通過這部分:
否則{返回NULL; }
您對 find_id() 的實現不會迭代整個數組,而是始終在數組的第一個成員處返回;
查找 function 應該是這樣的:
char *find_id(int id, struct student *arr[], int n) {
char *retval = NULL;
for(int i = 0; i < n; i++){
struct student *p = arr[i];
if(p->id == id)
{
retval = p->name;
break;
}
}
return retval;
}
您不能從返回類型為char *
的 function 返回struct student *
* 。
因此,教授可能要求返回學生的姓名,而不是學生結構本身。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.