2013-03-14 68 views
1

给定一个结构体对象或指向一个结构体的指针,如何在对象之前读取x字节的内存?例如,如果我知道对象从地址10开始,那么我如何从地址10-x读取x字节到地址9?谢谢。在C中,如何读取地址前面的内存块

+1

强制转换为char *,然后减去“x”,并获得指向前面字节的指针。就你而言,这就像一个数组。 – 2013-03-14 04:29:51

+0

您可以像之前的评论所说的那样获取地址,但对其的访问可能未定义。例如,如果这是另一个对象正在使用的呢。 – 2013-03-14 04:33:24

回答

1

从任意地址读取字节很简单:简单地把指针char*,减去所需的字节数,并开始阅读,就像这样:

struct MyStruct { 
    int x; 
    int y; 
} test[100]; 
... 
void *ptr = &test[50]; 
... 
char *start = (char*)prt; 
start -= 10; 
// You can read from the start pointer now 

您需要确保该内存您正在尝试阅读对您的应用程序访问是合法的。内存需要成为静态或动态分配的较大结构的一部分。否则,这是未定义的行为,这可能导致崩溃。

+0

换句话说,如果我想读取2个前面的字节,我可以做“int * start =(int *)prt; start - = 1; int t = * start”? – cody 2013-03-14 04:38:51

+0

@cody不,这会读取两个前面的“int”,而不是前面的两个字节。你需要在减去2之前转换成'char *',否则就是减去'2 * sizeof(int)'。 – dasblinkenlight 2013-03-14 04:42:53

1

Nitzan Shaked在评论中表示,将指针指向(char *),以便您可以在字节级执行指针算术。然后执行指针运算(减去需要减去的字节数),然后将其转换回需要读取的类型的指针。