给结构体中的变量赋值

我定义了一个结构体typedefstructL1{chartype;stringname;L1*next1;}sdt;要给其中的name赋值sdt*s1;s1->name... 我定义了一个结构体
typedef struct L1
{
char type;
string name;
L1 *next1;
}sdt;
要给其中的name赋值sdt *s1;s1->name="K1";
就会提示错误 这是为什么???大侠们帮帮忙吧~
展开
 我来答
aven_yang
推荐于2017-11-25 · TA获得超过719个赞
知道小有建树答主
回答量:350
采纳率:100%
帮助的人:313万
展开全部
是因为你使用指针时还没分配内存。
可以这样
typedef struct L1
{
char type;
string name;
L1 *next1;
}sdt;
sdt s; s.name="K1";
或者用下面的方法
#include<stdlib.h>//在开头处包括头文件

sdt *s1 = (sdt*)malloc(sizeof(sdt));
s1->name = "K1";
这两种方法都行
追问
#include 
#include
#include
using namespace std;
typedef struct L
{
string name;
char a;
L *next;
}sdt;
int main()
{
sdt *s1;
s1=(sdt*)malloc(sizeof(sdt));
s1->a='q';
s1->name="K";
coutaname;
return 0;
}
这是我所有的代码 程序还是崩了。。
追答
程序崩的原因是你在结构体里定义了类string的变量,编译器不支持把类string对象作为成员的结构体进行初始化,所以你在程序中s1->name="k";是不支持的,所以运行的时候崩了。
你可以用一个char型的数组来代替string对象,例如
typedef struct L
{
char name[30];
char a;
L *next;
}sdt;
另外,既然你用的是c++,那就用new来分配内存吧,记得用delete释放
改成下面这样就行了。

#include
#include
#include
using namespace std;
typedef struct L
{
string name;
char a;
L *next;
}sdt;
int main()
{
sdt *s1;
s1=new sdt;
couta='q';
s1->name="K";
coutaname;
delete s1;
return 0;
}
lh1808392621
2012-05-05
知道答主
回答量:9
采纳率:0%
帮助的人:1.3万
展开全部
你的指针变量s1是不是没有初始化或者是没有分配内存,如果是这样,你就是使用了不知道到指向那里的指针,这是很危险。
这是我写的:
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
struct L1
{
char type;
string name;
L1 *next1;
};
typedef L1* pl;
int main()
{
pl s1;
s1= new L1;
s1->name="nsdjkfhds";
cout<<s1->name<<endl;
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a652570001
2012-05-05 · TA获得超过129个赞
知道答主
回答量:153
采纳率:0%
帮助的人:172万
展开全部
sdt *s1;s1->name="K1";
这里的s1是指针,还没有赋初值啊,不能使用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
winnaa
2012-05-05 · 超过18用户采纳过TA的回答
知道答主
回答量:80
采纳率:0%
帮助的人:54.3万
展开全部
typedef struct L1
{
char type;
string name;
L1 *next1;
}sdt;
sdt *s1 = new sdt;//这样就好了, 记得释放
s1->name="K1";
要不就这样:
typedef struct L1
{
char type;
string name;
L1 *next1;
}sdt;
sdt s1 ;s1.name="K1";

sdt *s1;s1->name="K1";// 这样的话 ,并没有分配存储空间啊 ,你把 k1 放哪儿?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
82678769
2010-05-10 · TA获得超过244个赞
知道小有建树答主
回答量:118
采纳率:0%
帮助的人:105万
展开全部
c里面是不能这样赋值的, 这种方式只有在定义的时候初始化才可以
如果 int a[][2] = { 2,2}这是正确的,但是定义数组之后再 a = { 2,2}是不正确的, 你还是一个一个赋值吧. 另外说明一下吧, 定义的时候是给变量申请内存, 编译器会把你初始话的值赋值到内存, 但是如果 以后在赋值的时候, 就成了指针了, 语法就不正确了
m1->edges=
{
{0,1,0,0},
{1,0,1,0},
{0,1,0,1},
{0,0,1,0}
};

------
你可以把你要初始话的这个数组定义个const数组, 后面再用for来赋值吧, 没有其他办法
{
{0,1,0,0},
{1,0,1,0},
{0,1,0,1},
{0,0,1,0}
};
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式