C语言用字符串直接给结构体赋值方法 10

structsTime{charyear[4];charmonth[2];charday[2];};intmain(){charbuf[8]="20130525";str... struct sTime

{
char year[4];

char month[2];

char day[2];

};
int main()
{
char buf[8]="20130525";

struct sTime stime;

memcpy(&stime,buf,8);

printf("year: %s\n",stime.year);
printf("month: %s\n",stime.month);
printf("day: %s\n",stime.day);
}

结果:
year:20130525

month:0525

day:25

反复尝试,都不行,包括加'\0',是否结构体定义的时候,每个成员变量的大小都加1,如果先把已经赋值好的结构体传给buf,然后用buf再赋值给结构体,就正常,请大虾们给的正确方法。
展开
 我来答
匿名用户
2019-09-15
展开全部
好多年前的问题了...
year month day你都要作为单独的字符串的话, 后边都需要\0, 所以长度应该定义成4 3 2才对.
而且应该不推荐你这种写法, 结构体存在字节对齐的情况, 如果长度定义成4 3 2 ,那么再字节对齐后就不是连续内存了, 更何况有些编译器在字节对齐的时候会进行顺序优化
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
佛曰无物
2015-02-03
知道答主
回答量:1
采纳率:0%
帮助的人:1275
展开全部

你怎么这么笨呢,你输出能这样输出吗,你定义的是字符数组,输出的是字符串,解决办法有两个:

  1. 单个字符输出年月日

  2. 如下输出 printf("%4.4s %2.2s %2.2s",stime.year,stime.month,stime.day);

不多说了,看你有 潜力,这一本如来神掌两块钱卖给你了

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sunxian1988
推荐于2020-01-20
知道答主
回答量:55
采纳率:0%
帮助的人:25.9万
展开全部
你这个明显有问题 你怎么吧字符数组复制给了结构体 memcpy(&stime,buf,8); 这个有问题
struct sTime

{
char year[4];

char month[2];

char day[2];

};
int main()
{
struct sTime stime= {"2013", "05", "25"};
printf("year: %s\n",stime.year);
printf("month: %s\n",stime.month);
printf("day: %s\n",stime.day);
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
DarkZoneS
2013-05-28 · 超过14用户采纳过TA的回答
知道答主
回答量:61
采纳率:0%
帮助的人:39.7万
展开全部
你说的初始化吧
struct sTime

{
char year[4];

char month[2];

char day[2];

} = {"2013", "05", "25"}
追问
不是初始化,比如我从别的地方读取数据到buf中,然后用buf直接复制给结构体,通过结构体变量的操作做一些具体算法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
李童鞋你好帅
2013-05-28
知道答主
回答量:17
采纳率:0%
帮助的人:4.7万
展开全部
结果:
year:20130525

month:0525

day:25

是你运行的结果吗
追问
对,不知道怎么回事,上网找了很长时间,都没找到解决办法,按理说结构体是连续存储的,用相同大小的赋值应该是可以的,不过c语言没有数组溢出检查,但是用结构体给buf赋值,然后再用buf给结构体赋值就可以,就不知道具体是怎么回事
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式