代码之家  ›  专栏  ›  技术社区  ›  Mohd Shibli

如何将结构数组的每个元素传递到函数中?

c
  •  0
  • Mohd Shibli  · 技术社区  · 6 年前

    #include<stdio.h>
    #include<string.h>
    
    struct students{
        char name[50];
        int marks;
    }st[10];
    
    
    int size;
    
    int addStudent(struct students st,char sname[], int marks){
        static int count = 0;
        strncpy(st.name,sname,strlen(sname));
        st.marks = marks;
        count++;
        return count;
    }
    
    void showStudents(int size){
        int i;
        printf("Total number of students : %d\n",size);
        for(i=0;i<size;i++){
            printf("Student Name : %s\nMarks : %d\n",st[i].name,st[i].marks);
        }   
    }
    
    int main(){
        int n, marks, i;
        char name[50];
        printf("Enter the total number of students : ");
        scanf("%d",&n);
        getchar();
        for(i=0;i<n;i++){
            printf("Enter the name of the Student : ");
            fgets(name,50,stdin);
            printf("Enter the marks of the student : ");
            scanf("%d",&marks);
            getchar();
            size = addStudent(st[i], name, marks);
        }
    
        showStudents(size);
    
        return 0;
    }
    

    我得到以下输出

    Enter the total number of students : 2
    Enter the name of the Student : shibli
    Enter the marks of the student : 23
    Enter the name of the Student : max
    Enter the marks of the student : 45
    Total number of students : 2
    Student Name :
    Marks : 0
    Student Name :
    Marks : 0
    

    1 回复  |  直到 6 年前
        1
  •  3
  •   Paul Ogilvie    6 年前

    将结构传递给函数时,函数实际上会将结构复制到输入结构参数并对其进行处理。因此addStudent函数不是在全局数组项上工作,而是在本地副本上工作。

    int addStudent(struct students *st,char sname[], int marks){
        static int count = 0;
        strncpy(st->name,sname,strlen(sname)+1);
        st->marks = marks;
        count++;
        return count;
    }
    

    对addStudent函数的调用如下所示:

        size = addStudent(&st[i], name, marks);
    

    这里还有一个问题,使用strncpy复制string的strlen,并没有以null结束字符串。所以您应该使用strlen+1来复制空终止符,或者简单地使用snprintf在字符串末尾添加空终止符