我尝试编写程序whitch使用stack来呈现某种数据(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 <1时,它才是正确的。 127。 为什么会这样?
P.S。我不想更改data_buffer的类型,因为它还包含不同长度的char和字符串。
工作示例(!! - 在将其写入缓冲区之前测试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
答案 0 :(得分:1)
两行都缺少对(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)));