一个困扰了很久的问题!

heizi406 2004-10-10 02:24:26
代码如下:
#include<iostream>
using namespace std;

void main()
{
char sa[9];
sa[0] = 0x09;
double da = 89.334;
char* sa1 =reinterpret_cast<char*>(&sa);
strcat(sa,sa1);
memcpy(&da, sa+1,sizeof(double));
cout<<da;
return;
}

输出结果:4.44659e-323

不是我想要的原来的da = 89.334
我那里出错了,小弟不明白!谁帮我?
不要告诉我通过把double转换成ASCII码的途径,这个大家都会。
...全文
85 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
oo 2004-10-10
  • 打赏
  • 举报
回复
首先,sa数组占9个byte

另外,sa和da的位置跟操作系统(cpu)有关系,在windows里,可能是这样的:
(int)(&da) = (int)(&sa) - sizeof(double),没验证过,可以写个程序验证一下。

不明白你做一次strcat(sa,sa1);是干什么用,因sa没有初始化,这个动作有可能会把堆栈破坏掉,
程序没死菜只能说是幸运。
stephen_mill 2004-10-10
  • 打赏
  • 举报
回复
你把一个未出世化的字符串的内容拷贝给变量da的内存区域,等于说是改变了da的值,
因此da的值不确定,怎么能指望它是原先的初值呢?

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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