结构体数组元素中的字符成员赋值问题

#include<stdio.h>#defineSTstructstdST{intnum;charname[50];charsex;};voidmain(){STs[10... #include<stdio.h>
#define ST struct std
ST
{
int num;
char name[50];
char sex;
};

void main()
{

ST s[10]={{5,"陈博",'m'}};
printf("%s\n",s[0].name);
s[1]=s[0];
s[1].name[50]="王佳芝";
//scanf("%s",s[1].name);
printf("%s\n",s[1].name);
}
当我对s[1].name重新赋值时测试错误
如果是通过scanf来给它重新赋值就可以成立
请高手告诉我对字符串直接赋值时出了什么问题
该怎么解决
谢谢了
展开
 我来答
猪头或火宝宝
推荐于2016-06-30 · TA获得超过2758个赞
知道小有建树答主
回答量:1001
采纳率:0%
帮助的人:1529万
展开全部
你好!!!

原因很简单:s[1].name[50]="王佳芝";左边使用结构体的对象的成员,右边是字符串,要是那是存储在静态存储区的,这样赋值不符合语法:
应该使用strcpy()函数即可:
修改如下:
#include<stdio.h>
#include<string.h>
#define ST struct std
ST
{
int num;
char name[7];
char sex;
};

void main()
{

ST s[10]={{5,"陈博",'m'}};
printf("%s\n",s[0].name);
s[1]=s[0];
strcpy(s[1].name,"王佳芝");
//s[1].name[50]="王佳芝";
//scanf("%s",s[1].name);
printf("%s\n",s[1].name);
}
结果:
陈博
王佳芝
Press any key to continue
warmwormn
2010-09-01 · TA获得超过737个赞
知道小有建树答主
回答量:1694
采纳率:0%
帮助的人:1340万
展开全部
你这是数组,不是字符串
数组名是指针,但这个指针是不能被变更的

ST s[10]={{5,"陈博",'m'}};这种写法只有在对char数组进行初始化时有用
如果要赋值的话,如果确认是字符串
用楼上的strncpy

s[1].name[50]="王佳芝"; -->
strncpy( s[1].name, "王佳芝", 50 );
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Ghostime
2010-09-01 · TA获得超过161个赞
知道小有建树答主
回答量:661
采纳率:0%
帮助的人:342万
展开全部
s[1].name[50]
改成
s[1].name="王佳芝";
试试吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
silencesword
2010-09-01 · TA获得超过394个赞
知道小有建树答主
回答量:338
采纳率:0%
帮助的人:156万
展开全部
还是尽量多用strncpy这样的函数吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式