程序要怎么改才能不报错?
这是我写的有头单链表结构体成员为字符类型的程序可以运行但是我想改为 字符串的我这样改怎么会报错的?帮我纠正下 ……与其截图,不如发代码……回复,工具栏右三 #include<stdlib.h>
#include<string.h>
#include <stdio.h>
#include <malloc.h>
struct Book
{
char a;
struct Book *next;
};
struct Book *list()
{
struct Book *p1=(struct Book *)malloc(sizeof(struct Book));
p1->next=NULL;
return p1;
}
//传参char a[]非char a
struct Book *xinlist(char a[])
{
struct Book *p2=(struct Book *)malloc(sizeof(struct Book));
// p2->a=a; 数组之间不能直接赋值,需要通过strcpy或者逐个字符赋值。
strcpy(p2->a,a);
p2->next=NULL;
return p2;
}
void lianjie(struct Book *p1,char a[])
{
struct Book *p3=xinlist(a);
p3->next=p1->next;
p1->next=p3;
}
void dayin(struct Book *p1)
{
struct Book *p4=p1->next;
while(p4!=NULL)
{
printf("%s",p4->a);
p4=p4->next;
}
}
int main(void)
{
struct Book *p=list();
lianjie(p,"带你飞");
lianjie(p,"阿斯打");
lianjie(p,"阿斯打算");
dayin(p);
return 0 ;
} 贫蛋小刺朗 发表于 2018-10-11 15:42
struct Book *xinlist(char *a)//改成数组的地址可以吗?假如可以的话下边strcpy里的参数对不对。主函数输入的参数还需要改吗?
{
struct Book *p2=(struct Book *)malloc(sizeof(struct Book));
// p2->a=a; 数组之间不能直接赋值,需要通过strcpy或者逐个字符赋值。
strcpy(p2->a,(*a));
p2->next=NULL;
return p2; 风骚的小胖子。 发表于 2018-10-11 18:42
struct Book *xinlist(char *a)//改成数组的地址可以吗?假如可以的话下边strcpy里的参数对不对。主函 ...
上面可以,下面不可以,数组名就是地址了 claws0n 发表于 2018-10-11 18:57
上面可以,下面不可以,数组名就是地址了
哦了谢谢大佬点解 太爱你了{:5_101:} 好像出问题了 claws0n 发表于 2018-10-11 18:57
上面可以,下面不可以,数组名就是地址了
出问题了 报错了 你看下我上图片了 风骚的小胖子。 发表于 2018-10-11 20:01
出问题了 报错了 你看下我上图片了
发代码比较好#include<stdlib.h>
#include<string.h>
#include <stdio.h>
#include <malloc.h>
struct Book
{
char a;
struct Book *next;
};
struct Book *list()
{
struct Book *p1=(struct Book *)malloc(sizeof(struct Book));
p1->next=NULL;
return p1;
}
struct Book *xinlist(char *a)
{
struct Book *p2=(struct Book *)malloc(sizeof(struct Book));
// p2->a=a;
strcpy(p2->a,a);
p2->next=NULL;
return p2;
}
void lianjie(struct Book *p1,char *a)
{
struct Book *p3=xinlist(a); // <--------
p3->next=p1->next;
p1->next=p3;
}
void dayin(struct Book *p1)
{
struct Book *p4=p1->next;
while(p4!=NULL)
{
printf("%s",p4->a);
p4=p4->next;
}
}
int main(void)
{
struct Book *p=list();
lianjie(p,"ABC");
lianjie(p,"DEF");
lianjie(p,"GHI");
dayin(p);
return 0 ;
} 本帖最后由 风骚的小胖子。 于 2018-10-11 21:13 编辑
claws0n 发表于 2018-10-11 20:13
发代码比较好
struct Book *p3=xinlist(a); // <--------这句理解 因为参数是指针 传入指针;
strcpy(p2->a,a);数组不能互相赋值只能cpy 参数为什么是数组和指针?我感觉应该是(p2->a,(*a))对指针取值后为数组才可以啊p2->a和a都不是同一性质 怎么互相cpy?
风骚的小胖子。 发表于 2018-10-11 21:11
struct Book *p3=xinlist(a); // a,a);数组不能互相赋值只能cpy 参数为什么是数组和指针?我感 ...
函数声明是说明参数是什么样的数据类型,传进来之后,就直接用了,你多一个*是解引用~
解引用是字符,不是字符串。字符串特别,给首地址就好,认结束符~ 本帖最后由 风骚的小胖子。 于 2018-10-11 22:01 编辑
claws0n 发表于 2018-10-11 21:36
函数声明是说明参数是什么样的数据类型,传进来之后,就直接用了,你多一个*是解引用~
解引用是字符,不 ...
是不是这个意思
char ="fishc";
strcpy(a,"IN");
a字符串数组里就是IN了呗?
我刚才理解为那个指针为指向数组的指针了。然后解引用变为数组。然后数组之间再cpy
风骚的小胖子。 发表于 2018-10-11 21:59
是不是这个意思
char ="fishc";
嗯,虽然没有用过{:10_282:}
char a[] = "fishc"; //这样好不好
但是 a[] = {'I','N','\0','h','c','\0'}; claws0n 发表于 2018-10-11 22:01
嗯,虽然没有用过
char a[] = "fishc"; //这样好不好
但是 a[] = {'I','N','\0','h','c','\0 ...
懂了太激动了 打错了哈哈。谢谢大佬 claws0n 发表于 2018-10-11 22:01
嗯,虽然没有用过
char a[] = "fishc"; //这样好不好
但是 a[] = {'I','N','\0','h','c','\0 ...
是懂了太激动了 打错了哈哈。 感觉大佬你好细心呀 还提醒我cpy的会复制数组后边的隐藏结束符。谢谢啦 厉害,厉害{:5_108:} 第五 发表于 2018-10-11 22:20
厉害,厉害
#include<stdlib.h>
#include<string.h>
#include <stdio.h>
#include <malloc.h>
struct Book
{
char a;
struct Book *next;
};
struct Book *list()
{
struct Book *p1=(struct Book *)malloc(sizeof(struct Book));
p1->next=NULL;
return p1;
}
struct Book *xinlist(char *a)
{
struct Book *p2=(struct Book *)malloc(sizeof(struct Book));
// p2->a=a;
strcpy(p2->a,a);
p2->next=NULL;
return p2;
}
void lianjie(struct Book *p1,char *a)
{
struct Book *p3=xinlist(a); // <--------
static struct Book *p4;
p4->next=p3;
p3->next=NULL; <--------改为尾插法为什么会报段错误昵?
p4=p3;
// p3->next=p1->next;
//p1->next=p3;
}
void dayin(struct Book *p1)
{
struct Book *p4=p1->next;
while(p4!=NULL)
{
printf("%s",p4->a);
p4=p4->next;
}
}
int main(void)
{
struct Book *p=list();
lianjie(p,"ABC");
lianjie(p,"DEF");
lianjie(p,"GHI");
dayin(p);
return 0 ; claws0n 发表于 2018-10-11 22:01
嗯,虽然没有用过
char a[] = "fishc"; //这样好不好
但是 a[] = {'I','N','\0','h','c','\0 ...
#include<stdlib.h>
#include<string.h>
#include <stdio.h>
#include <malloc.h>
struct Book
{
char a;
struct Book *next;
};
struct Book *list()
{
struct Book *p1=(struct Book *)malloc(sizeof(struct Book));
p1->next=NULL;
return p1;
}
struct Book *xinlist(char *a)
{
struct Book *p2=(struct Book *)malloc(sizeof(struct Book));
// p2->a=a;
strcpy(p2->a,a);
p2->next=NULL;
return p2;
}
void lianjie(struct Book *p1,char *a)
{
struct Book *p3=xinlist(a); // <--------
static struct Book *p4;
p4->next=p3;
p3->next=NULL; <--------改为尾插法为什么会报段错误昵?
p4=p3;
// p3->next=p1->next;
//p1->next=p3;
}
void dayin(struct Book *p1)
{
struct Book *p4=p1->next;
while(p4!=NULL)
{
printf("%s",p4->a);
p4=p4->next;
}
}
int main(void)
{
struct Book *p=list();
lianjie(p,"ABC");
lianjie(p,"DEF");
lianjie(p,"GHI");
dayin(p);
return 0 ; 风骚的小胖子。 发表于 2018-10-11 22:50
#include
#include
#include
看不懂啊 第五 发表于 2018-10-11 23:04
看不懂啊
好吧,那我等版主大佬明天帮我解答。也谢谢你哦。晚安
页:
[1]
2