1
我嘗試編寫使用堆棧來呈現某種數據(char,double或string)的程序。在char []緩衝區中保存double值
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. 它爲什麼會這樣?
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
除非'buffer_top'被認爲是double的對齊要求的倍數,否則這些操作應該通過在緩衝區和臨時'double'對象之間複製字節來實現。正如所寫的,這可以具有C標準未定義的行爲。 –