2013-10-05 2 views
1

나는 프로그램 whitch가 현재의 어떤 종류의 데이터 (char, double 또는 string)를 위해 스택을 사용하려고 노력한다.char [] 버퍼에 두 개의 값 저장하기

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. 나는 char 및 다른 길이의 문자열을 포함하기 때문에 data_buffer 유형을 변경하고 싶지 않습니다.

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 

답변

1

두 선이 (double *)에 캐스팅 누락, 그래서 그들은 각각 char 할당 및 읽기를 할 다음과 같습니다 - 작업의

예 (! 쓰기 전에 N의 테스트 출력은 버퍼링합니다. . 어떤 코드가 실제로 어떤 명시 적 (char) 캐스트로하고있는 것은 잘못된 형식 변환을 강조하기 위해 추가

*(data_buffer + buffer_top) = (char) n; 
... 
printf("%f ", (double) (char) *(data_buffer + buffer_top)); 

을 당신이 원하는 것은 :

+1

'buffer_top'가'double'의 정렬 요구 조건의 배수로 알려져 있지 않다면 버퍼와 임시'double' 객체 사이에 바이트를 복사하여 구현해야합니다. 서면으로, 이것은 C 표준에 의해 정의되지 않은 동작을 가질 수 있습니다. –