1

我尝试编写程序 whitch 使用堆栈来呈现某种数据(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 时才正确。为什么会这样?

PS 我不想更改 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
4

1 回答 1

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)));
于 2013-10-05T18:18:10.937 回答