首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在char[]缓冲区中保存双值

在char[]缓冲区中保存双值
EN

Stack Overflow用户
提问于 2013-10-05 18:14:36
回答 1查看 221关注 0票数 1

我试图编写一个程序,它使用堆栈来表示某种数据(char、double或string)。

代码语言:javascript
代码运行次数:0
运行
复制
char *data_buffer;
double n;
...
data_buffer = (char*)malloc(4096 * sizeof(char));
...
*(data_buffer + buffer_top) = n; //buffer_top - just offset for first byte
...
printf("%f ", (double)*(data_buffer + buffer_top));

变量data_buffer和buffer_top正确。但产出是奇怪的。只有当n< 127时才正确。为什么会是?

我不想改变data_buffer的类型,因为它还包括不同长度的字符和字符串。

工作示例(!)-在将n写入缓冲区之前测试它的输出:

代码语言:javascript
代码运行次数:0
运行
复制
126 //push
!! 1.260000e+02 
127 // push
!! 1.270000e+02   
128 // push
!! 1.280000e+02 
. // pop
-128.000000 //error
. //pop
127.000000  //ok
. //pop
126.000000  //ok
123456 // push
!! 1.234560e+05 
. //pop
64.000000 //error
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-05 18:18:10

这两行都缺少对(double *)的强制转换,因此它们分别执行char分配和读取。下面是您的代码在添加一些显式(char)转换以突出显示不正确的类型转换时所做的工作。

代码语言:javascript
代码运行次数:0
运行
复制
*(data_buffer + buffer_top) = (char) n;
...
printf("%f ", (double) (char) *(data_buffer + buffer_top));

你想要的是:

代码语言:javascript
代码运行次数:0
运行
复制
*((double *) (data_buffer + buffer_top)) = n;
...
printf("%f ", *((double *) (data_buffer + buffer_top)));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19201095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档