怎样实现把一个结构体中的数据存放到数组中,然后输出?

xnew2008 2003-09-21 04:22:48
struct DATE
{
int year;
int month;
int day;
};
main()
{
struct DATE date;
date.year=2003;
date.month=9;
date.day=21;
char temp[20];
memset(temp,0,20);
strncpy(temp,(char*)&date,20);
cout<<"temp="<<*temp<<endl;
}
好像有问题?
...全文
1927 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cy214 2003-09-21
  • 打赏
  • 举报
回复
int是用四个字节表示2的32次方范围内的整数(无符号或者代符号) 是用位表示的 char就是用一个字节表示一个字符啦 所以你一个int memcpy到char 中得到的只是那个int所表示整数的位信息 不会是一个存储在char中的和int所表示整数一样的字符串
xnew2008 2003-09-21
  • 打赏
  • 举报
回复
难道char和int在内存中的表示不一样?
bluebohe 2003-09-21
  • 打赏
  • 举报
回复
建议你直接用memcpy
cy214 2003-09-21
  • 打赏
  • 举报
回复
因为你的temp数组定义为char 但是源数据的类型是int, int在内存中储存方式和char不一样 你的temp中得到的结果就是int在内存中的实际值 当然会有00 (比如随便一个数 9 按int在内存中是09 00 00 00)
其实我在第一个回帖说了 把int的数据直接copy到char数组中显示的不会是你想看到的int对应数字
xnew2008 2003-09-21
  • 打赏
  • 举报
回复
还是有点问题:
temp[0]=-45;
temp[1]=7
temp[4]=9
temp[8]=21;
其余均为零,为什么?
awant2k 2003-09-21
  • 打赏
  • 举报
回复
strncpy(temp,(char*)&date,20);
改成
memcpy(temp,&date,20);


cout<<"temp="<<*temp<<endl;
输出不正确,因为 temp 指向的字符串是一个结构,并不是 字符型
cy214 2003-09-21
  • 打赏
  • 举报
回复
date中存放的三个int不是char结构的 一个int占4个字节 这样strcpy保证会有问题 因为int中很可能有00这个字节
所以如果你想用这种结构来直接复制到数组中的话 定义一个int temp[10]; 然后用memcpy复制过去
想把int变成char *用itoa

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧