簡體   English   中英

從 function 返回一個結構指針,返回類型為 char*

[英]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);
}
  1. 通過這部分:

    if(arr[i]->id == id) { return arr[i]; }

您的 find_id() 實現不返回 char * 但 struct student *;

  1. 通過這部分:

    否則{返回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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM