如何将结构体中的字符串传入函数,并实现对结构体字符串的写入?


#include "stdio.h"
#include "windows.h"
#include "stdlib.h"
#define static int;
#define MAXSIZE 20//顺序表最大长度

/*定义顺序表*/
typedef struct
{
    int sno[MAXSIZE];
    char name[MAXSIZE][10];
    char gender[MAXSIZE];
    int score[MAXSIZE];
    int length;
}sqlist;

/*初始化顺序表*/
void initlist(sqlist* l)
{
    l->length = 0;
}

static creatlist(sqlist* l, int a[],char b[],char c[],int d[], int n)
{
    if (n > MAXSIZE)
    {
        printf("空间不够,无法建立顺序表。\n");
        return 0;
    }
    for (int k = 0; k < n; k++)
    {
        l->sno[k] = a[k];
        l->name[k][10] = b[k];
        l->gender[k] = c[k];
        l->score[k] = d[k];
    }
    l->length = n;
    return 1;
}

static list_insert(sqlist* l, int pos, int sno, char name[], char gender, int score)
{
    if (pos > l->length || pos < 1)
        return 0;
    if (l->length + pos > MAXSIZE)
        return 0;
    for (int i = l->length - 1; i >= pos-1; i--)
    {
        l->sno[i + 1] = l->sno[i];
        l->name[i + 1][10] = l->name[i];
        l->gender[i + 1] = l->gender[i];
        l->score[i + 1] = l->score[i + 1];
    }
    l->sno[pos-1] = sno;
    l->name[pos - 1][10] = name;
    l->gender[pos-1] = gender;
    l->score[pos-1] = score;
    return 1;
}

int main()
{
    int STATIC;
    sqlist l;
    initlist(&l);
    int sno[5] = { 1001,1002,1004,1005,1006 }, score[5] = { 88,66,90,77,24 };
    char name[5][10] = { "ChenChen","WangGang","ShangFang","ChengPing","WangPing" }, gender[5] = { 'M','M','F','F','M' };
    STATIC = creatlist(&l, sno, name, gender, score, 5);
    for (int i = 0; i < 5; i++)
    {
        printf("%s",l->name[i]);
    }
    return 0;
}

上面是我目前为止写的顺序表的代码,但是程序出现几个warnings,如图:

img

img

大概就是我把结构体中的字符串传入到creatlist函数里面,运行程序之后是这样的:

img

求解答,求帮忙改进一下代码,谢谢各位。

你这个结构体就是把零散的数组放到一起了,结构体内单位尽量最小化

大概改了下

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
//int 后多了分号
#define static int  
#define MAXSIZE 20 //顺序表最大长度

/*定义顺序表*/

typedef struct
{
    int sno, score;
    char name[10];
    char gender;
} Node;

typedef struct
{
    Node node[MAXSIZE]; //这里应该用指针,根据需要动态分配
    int length;
} sqlist;

/*初始化顺序表*/
void initlist(sqlist *l)
{
    l->length = 0;
}

static creatlist(sqlist *l, int a[], char b[][10], char c[], int d[], int n)  //字符串数组是个二维数组。
{
    if (n > MAXSIZE)
    {
        printf("空间不够,无法建立顺序表。\n");
        return 0;
    }
    for (int k = 0; k < n; k++)
    {
        l->node[k].sno = a[k];
        // l->name[k][10] = b[k];
        strcpy(l->node[k].name, b[k]); // 字符串赋值
        l->node[k].gender = c[k];
        l->node[k].score = d[k];
    }
    l->length = n;
    return 1;
}
//static list_insert(sqlist *l, int pos, int sno, char name[][10], char gender, int score)  也一样
int main()
{
    int STATIC;
    sqlist l;
    initlist(&l);
    int sno[5] = {1001, 1002, 1004, 1005, 1006}, score[5] = {88, 66, 90, 77, 24};
    char name[5][10] = {"ChenChen", "WangGang", "ShangFang", "ChengPing", "WangPing"}, gender[5] = {'M', 'M', 'F', 'F', 'M'};
    STATIC = creatlist(&l, sno, name, gender, score, 5);
    for (int i = 0; i < 5; i++)
    {
        printf("%s ", l.node[i].name); // l->name[i]);
    }

    return 0;
}


问题1:字符串赋值不对
问题2:变量用.访问,指针用->访问。
正确代码如下,没问题请点击采纳答案。

字符串赋值不能简单的使用等号哟 需要使用strcpy 搜一下这个函数吧

img

img

img