小弟一个几行的代码得不到想要的结果,请高手指教!

heizi406 2004-10-09 12:00:30
#include<iostream>
using namespace std;

typedef struct
{
double a1 ;
double a2 ;
double a3 ;
}TRI;

void main()
{

TRI d;
d.a1 = 78.3543;
d.a2 = 65.23 ;
d.a3 = 2.989;
char str[24];
memcpy(str,&d,sizeof(TRI));
cout<<strlen(str)<<endl;

d.a1 = 0;
d.a2 = 65.23 ;
d.a3 = 2.989;
memcpy(str,&d,sizeof(TRI));
cout<<strlen(str)<<endl;

d.a1 = 78.3543;
d.a2 = 0 ;
d.a3 = 2.989;
memcpy(str,&d,sizeof(TRI));
cout<<strlen(str)<<endl;
}

输出结果:
27
0
8

郁闷!为什么会这样?我该怎么得到正确的24呢?
...全文
170 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pacman2000 2004-10-09
  • 打赏
  • 举报
回复
很正常,说明double的0是全0。
fangrk 2004-10-09
  • 打赏
  • 举报
回复
sizeof(str);
hcj2002 2004-10-09
  • 打赏
  • 举报
回复
也就是说:

1. TRI d;
d.a1 = 78.3543;
d.a2 = 65.23 ;
d.a3 = 2.989;
char str[24];
memcpy(str,&d,sizeof(TRI));
cout<<strlen(str)<<endl;
并不知道字符串到那里结束。
而后两个到0就以字符串结束了

robin97 2004-10-09
  • 打赏
  • 举报
回复
你把d的内存读出来看看吧,看看三次结果的第一个值为0的字节在什么地方。
hcj2002 2004-10-09
  • 打赏
  • 举报
回复
strlen()是得到一'\0'为结束的字符串的长度。

问题可能出在strlen上
heizi406 2004-10-09
  • 打赏
  • 举报
回复
懂了,是strlen的问题。
但是有点想不明白,strlen是根据'\0'来判断是否字串结束的,和char*一样,
但是我用如下代码:
TRI d;
d.a1 = 78.3543;
d.a2 = 0;
d.a3 = 2.989;
char* str = reinterpret_cast<char*>(&d);
double da;
memcpy(&da,str,8);
cout<<da<<endl;
memcpy(&da,str+8,8);
cout<<da<<endl;
memcpy(&da,str+16,8);
cout<<da<<endl;

能得到正确结果,为什么这里char*不会根据'\0'截断字串而使字符串变短而得不到结果呢?

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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