数据结构串的链式存储赋值问题!

#include"stdio.h"#include"stdlib.h"typedefstructNode{charch;structNode*next;}Cstring,... #include"stdio.h"
#include"stdlib.h"
typedef struct Node
{
char ch;
struct Node * next;
}Cstring,*Pstring;
void initstr(Pstring s)//初始化
{
s=(Pstring)malloc(sizeof(Cstring));
s->next=NULL;
}
void strval(Pstring s,char ch[])//赋值
{
int i=1;
if(s->next!=NULL)
s->next=NULL;
s->ch=ch[0];
Pstring s2;
s2=s;
for(i=1;ch[i]!='\0';i++)
{
Pstring s1;
initstr(s1);();//执行到这里就内存不能读!!
s1->ch=ch[i];
s2->next=s1;
s2=s1;
}
}
void main()
{
Cstring L;
char ch[4]="abc";
initstr(&L);
strval(&L,ch);
}
展开
 我来答
纯爷们哥儿
2013-08-31 · TA获得超过157个赞
知道小有建树答主
回答量:92
采纳率:0%
帮助的人:102万
展开全部
Pstring s1;
initstr(s1);();//执行到这里就内存不能读!!
s1->ch=ch[i];
这里s1,没有分配内存,因为你的Initstr函数写的有问题,不能改变实参的值。
修改Initstr函数,s1正确分配内存就不会造成内存的非法访问即段错误了。

void initstr(Pstring s)//初始化
{
s=(Pstring)malloc(sizeof(Cstring));
s->next=NULL;
}

这里涉及到了对指针的修改,c中函数参数是副本,这样即使修改了只是改变参数的副本,对于实参是没有影响的。应该修改为:
Pstring initstr(void)//初始化
{
Pstring s;
s=(Pstring)malloc(sizeof(Cstring));
s->next=NULL;
return s;
}

或者:
void initstr(Pstring *s)//初始化
{
*s=(Pstring)malloc(sizeof(Cstring));
*s->next=NULL;
}
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
yunxiaoxue027
2013-08-18 · 超过23用户采纳过TA的回答
知道答主
回答量:81
采纳率:0%
帮助的人:55.1万
展开全部
initstr(s1);();//执行到这里就内存不能读!!你这里函数initstr(s1);后面那个()干什么的啊?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式