发布网友 发布时间:2022-04-23 12:51
共5个回答
热心网友 时间:2023-10-14 05:39
好多年前的问题了...
year month day你都要作为单独的字符串的话, 后边都需要\0, 所以长度应该定义成4 3 2才对.
而且应该不推荐你这种写法, 结构体存在字节对齐的情况, 如果长度定义成4 3 2 ,那么再字节对齐后就不是连续内存了, 更何况有些编译器在字节对齐的时候会进行顺序优化
热心网友 时间:2023-10-14 05:39
你怎么这么笨呢,你输出能这样输出吗,你定义的是字符数组,输出的是字符串,解决办法有两个:
单个字符输出年月日
如下输出 printf("%4.4s %2.2s %2.2s",stime.year,stime.month,stime.day);
不多说了,看你有 潜力,这一本如来神掌两块钱卖给你了
热心网友 时间:2023-10-14 05:40
你这个明显有问题 你怎么吧字符数组复制给了结构体 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);
}
热心网友 时间:2023-10-14 05:40
你说的初始化吧
struct sTime
{
char year[4];
char month[2];
char day[2];
} = {"2013", "05", "25"}追问不是初始化,比如我从别的地方读取数据到buf中,然后用buf直接复制给结构体,通过结构体变量的操作做一些具体算法
热心网友 时间:2023-10-14 05:41
结果:
year:20130525
month:0525
day:25
是你运行的结果吗追问对,不知道怎么回事,上网找了很长时间,都没找到解决办法,按理说结构体是连续存储的,用相同大小的赋值应该是可以的,不过c语言没有数组溢出检查,但是用结构体给buf赋值,然后再用buf给结构体赋值就可以,就不知道具体是怎么回事