c语言结构体内字符数组问题
请教有空的老师:c语言,程序如下,在堆上建个结构体链表,因结构体内字符数组char name,请问怎么才能在函数 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;
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为空能行吗?
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;
} memset 置0当然可以了,字符串拷贝用 strcpy_s 或者 strncpy_s 就行了。 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"怎么传参,第一行空白处那个形参怎么写{:1_893:} 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 就行了,就是你注释那样的写法呀。
如果是微软的编译器,就看看微软的文档,也没差多少。 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"这个字符串通过参数传进去,有没有办法? 字符串传参用指针,char *,常量字符串加上const 修饰。
复制字符串,调用strcpy函数。 LuGuanDi 发表于 2024-9-7 19:06
字符串传参用指针,char *,常量字符串加上const 修饰。
复制字符串,调用strcpy函数。
今天累了,明天我试试,谢谢。我功力太差,不过觉得好像没那么简单~ xinkuzix 发表于 2024-9-7 19:13
今天累了,明天我试试,谢谢。我功力太差,不过觉得好像没那么简单~
形参写char* str,调用的时候传"zhangsan"就是传字符串首地址了,就这么简单。。 Ares157 发表于 2024-9-7 20:44
形参写char* str,调用的时候传"zhangsan"就是传字符串首地址了,就这么简单。。
果然如此,谢谢。 Ares157 发表于 2024-9-7 20:44
形参写char* str,调用的时候传"zhangsan"就是传字符串首地址了,就这么简单。。
麻烦老师给看下:现在的printmy()函数只能打出一个struct,能样改才能把struct d1 d2 d2全打出来{:1_919:}
#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);
}
页:
[1]
2