我试图编写一个程序,它使用堆栈来表示某种数据(char、double或string)。
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写入缓冲区之前测试它的输出:
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
发布于 2013-10-05 10:18:10
这两行都缺少对(double *)
的强制转换,因此它们分别执行char
分配和读取。下面是您的代码在添加一些显式(char)
转换以突出显示不正确的类型转换时所做的工作。
*(data_buffer + buffer_top) = (char) n;
...
printf("%f ", (double) (char) *(data_buffer + buffer_top));
你想要的是:
*((double *) (data_buffer + buffer_top)) = n;
...
printf("%f ", *((double *) (data_buffer + buffer_top)));
https://stackoverflow.com/questions/19201095
复制