2014-01-23 69 views
-3

後正常工作,我寫了這個代碼:調試器沒有的memcpy

#include <stdlib.h> 

int main(){ 
    double x; 
    foo(&x); 
    // ... 
} 


foo(double *p){ 
    char bytes[8]; 
    bytes[0]=62; 
    bytes[1]=-120; 
    bytes[2]=41; 
    bytes[3]=23; 
    bytes[4]=-16; 
    bytes[5]=-57; 
    bytes[6]=47; 
    bytes[7]=-40; 
    // bytes = 00111110 10001000 00101001 00010111 11110000 11000111 00101111 11011000 
    memcpy(p,bytes,sizeof(double)); 
    // (1) 
} 

memcpy我希望找到X裏的那些位,但在調試的代碼行(1)我有

*p = Binary: 1000000000000000000000000000000000000000000000000000000000000000 
    Hex: 0x8000000000000000 

但是通過使用fprintf(stderr,"%x",*p);打印該值,我得到值1729883e

+2

你需要告訴我們在哪兒'bytes'填充。 –

+1

您還沒有分配任何初始值 – nrathaus

+4

請建立一個最小的工作示例,顯示您感興趣的行爲。請參閱[SSCCE](http://sscce.org)。 – jrok

回答

1

我做了一些MODS得到這個運行,它實際上填入X做:

#include <stdio.h> 
#include <string.h> 

bar(){ 
    double x; 
    foo(&x); 
    printf("%f\n", x); 
} 

foo(double *p){ 
    char bytes[8]; 
    bytes[0]=-62; 
    bytes[1]=-120; 
    bytes[2]=41; 
    bytes[3]=23; 
    bytes[4]=-16; 
    bytes[5]=-57; 
    bytes[6]=47; 
    bytes[7]=-40; 
    memcpy(p,bytes,sizeof(double)); 
} 

int main(int argc, char* argv[]){ 
    bar(); 
} 

輸出是:-626117722098128509564427792535309566746344523980579928553066490382037451337019090855228509979567689660741872330473472.000000

如果這不是爲你工作,問題很可能要麼在代碼的其餘部分或調試器設置中。

+0

該值也是我在調試器中看到的值。 – HAL9000

0

嘗試

foo(double *p){ 
    unsigned char * chr; 
    bytes[0]=62; 
    bytes[1]=-120; 
    bytes[2]=41; 
    bytes[3]=23; 
    bytes[4]=-16; 
    bytes[5]=-57; 
    bytes[6]=47; 
    bytes[7]=-40; 
    memcpy(p,bytes,sizeof(double)); 
    // (1) 

    chr = (unsigned char *)p; 

    printf("%x", *chr); 
} 

你得到正確的值62