吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 448|回复: 15
收起左侧

[已解决] c语言结构体内字符数组问题

[复制链接]
xinkuzix 发表于 2024-9-7 12:19
请教有空的老师:
c语言,程序如下,在堆上建个结构体链表,因结构体内字符数组char name[N],请问怎么才能在函数 insert_n()中给新插入的结构体内的字符数组name赋值?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 30

struct bd{
int year;
int month;
int day;
};

struct stu{
    int id;
    char name[N];
    struct bd b;
struct stu * next;
};


void init_stu(struct stu * l) {
    l = (struct stu *) malloc(sizeof(struct stu));
    l->id = 0;
    memset(l->name, 0, sizeof(l->name)); //这样初始化stu.name[N]为空能行吗?
    l->b.year = 0;
    l->b.month = 0;
    l->b.day = 0;
    l->next = NULL;

    if (l == NULL) {
        printf("wrong!\n");
    }   
}

void create_stu(struct stu * l) {
    struct stu * tail_l = l;
    int len = 0;
   
    while (len <= 0) {
        printf("input some students: \n");
        scanf("%d", &len);
    }   

    int i;
   for (i = 0; i < len; i++) {
        struct stu * note = (struct stu *)malloc(sizeof(struct stu));
        scanf("%d", &(note->id));
        scanf("%s", note->name);
        scanf("%d", &(note->b.year));
        scanf("%d", &(note->b.month));
        scanf("%d", &(note->b.day));

        note->next = NULL;
        tail_l->next = note;
        tail_l = note;
    }
    printf("end.\n");

    }


struct stu * find_n(struct stu * l, int n) {
    struct stu * p = l;
    int i;
    for (i = 0; i < n; i++) {
        if (p == NULL) {
            printf("not find!\n");
            return NULL;
        }
        p = p->next;
    }
    return p;
}

void insert_n(struct stu * l, int n, int id,       int year, int month, int day) {
    struct stu * p = find_n( l, n);
    struct stu * note = (struct stu *)malloc(sizeof(struct stu));
    note->id = id;
//  memcpy(note->name, "xinzeng");    怎么给note->name 赋值?
    note->b.year = year;
    note->b.month = month;
    note->b.day = day;
    note->next = p->next;
    p->next = note;
}


int length(struct stu * l) {
    struct stu * p = l;
    int len = 0;

    if (p->next != NULL) {
        p = p->next;
        len++;
    }
    return len;
}


int del_n(struct stu * l, int n) {
    struct stu * pre = find_n(l, n-1);
    if (pre->next == NULL) {
        printf("i can not\n");
        return 0;
    }
    struct stu * p = pre->next;
    pre->next = p->next;
    free(p);
    return 1;
}

void print_l(struct stu * l) {
    struct stu * p = l->next;
    while (p != NULL) {
        printf("id=%d name=%s birthday:%d year %d month %d day.\n",
                p->id, p->name, p->b.year, p->b.month, p->b.day);
        p = p->next;
    }
}

int main() {

        reutrn 0;
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

DEATHTOUCH 发表于 2024-9-7 18:02
memset 置0当然可以了,字符串拷贝用 strcpy_s 或者 strncpy_s 就行了。
 楼主| xinkuzix 发表于 2024-9-7 18:29
DEATHTOUCH 发表于 2024-9-7 18:02
memset 置0当然可以了,字符串拷贝用 strcpy_s 或者 strncpy_s 就行了。

void insert_n(struct stu * l, int n, int id,       int year, int month, int day) {
    struct stu * p = find_n( l, n);
    struct stu * note = (struct stu *)malloc(sizeof(struct stu));
    note->id = id;
//  memcpy(note->name, "xinzeng");    怎么给note->name 赋值?
    note->b.year = year;
    note->b.month = month;
    note->b.day = day;
    note->next = p->next;
    p->next = note;
}
这个在链表中插入一个包含char字符数组的结构体对象,char字符数组内容比如“zhangsan"怎么传参,第一行空白处那个形参怎么写
DEATHTOUCH 发表于 2024-9-7 18:34
xinkuzix 发表于 2024-9-7 18:29
void insert_n(struct stu * l, int n, int id,       int year, int month, int day) {
    struct stu ...

如果你用的不是微软的编译器,嫌麻烦的话直接 strcpy 就行了,就是你注释那样的写法呀。
如果是微软的编译器,就看看微软的文档,也没差多少。
 楼主| xinkuzix 发表于 2024-9-7 18:50
DEATHTOUCH 发表于 2024-9-7 18:34
如果你用的不是微软的编译器,嫌麻烦的话直接 strcpy 就行了,就是你注释那样的写法呀。
如果是微软的编 ...

”void insert_n(struct stu * l, int n, int id,                   int year, int month, int day){....} “,
void insert_n(struct stu * l, int n, int id, ”zhangsan“, int year, int month, int day) {...}
像第二行这样参数不行吧,我想能不能把”zhangsan"这个字符串通过参数传进去,有没有办法?
LuGuanDi 发表于 2024-9-7 19:06
字符串传参用指针,char *,常量字符串加上const 修饰。
复制字符串,调用strcpy函数。
 楼主| xinkuzix 发表于 2024-9-7 19:13
LuGuanDi 发表于 2024-9-7 19:06
字符串传参用指针,char *,常量字符串加上const 修饰。
复制字符串,调用strcpy函数。

今天累了,明天我试试,谢谢。我功力太差,不过觉得好像没那么简单~
Ares157 发表于 2024-9-7 20:44
xinkuzix 发表于 2024-9-7 19:13
今天累了,明天我试试,谢谢。我功力太差,不过觉得好像没那么简单~

形参写char* str,调用的时候传"zhangsan"就是传字符串首地址了,就这么简单。。
 楼主| xinkuzix 发表于 2024-9-8 09:30
Ares157 发表于 2024-9-7 20:44
形参写char* str,调用的时候传"zhangsan"就是传字符串首地址了,就这么简单。。

果然如此,谢谢。
 楼主| xinkuzix 发表于 2024-9-8 18:15
Ares157 发表于 2024-9-7 20:44
形参写char* str,调用的时候传"zhangsan"就是传字符串首地址了,就这么简单。。

麻烦老师给看下:现在的printmy()函数只能打出一个struct,能样改才能把struct d1 d2 d2全打出来

#include <stdio.h>
#include <stdlib.h>

typedef struct test{
    int data;
    struct test * next;
}test;

void printmy(test *phead){
    if (phead != NULL){
    printf("%d %p \n", phead->data, phead->next);
    phead = phead->next;
    }
}

int main() {
    test * d1 = (test *)malloc(sizeof(test));
    d1->data = 100;
    d1->next = NULL;

    test * d2 = (test *)malloc(sizeof(test));
    d2->data = 200;
    d2->next = NULL;
    d1->next = d2;

    test * d3 = (test *)malloc(sizeof(test));
    d3->data = 300;
    d3->next = NULL;
    d2->next = d3;


    printmy(d1);

}
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 05:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表