给定一个结构体对象或指向一个结构体的指针,如何在对象之前读取x字节的内存?例如,如果我知道对象从地址10开始,那么我如何从地址10-x读取x字节到地址9?谢谢。在C中,如何读取地址前面的内存块
回答
从任意地址读取字节很简单:简单地把指针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
您需要确保该内存您正在尝试阅读对您的应用程序访问是合法的。内存需要成为静态或动态分配的较大结构的一部分。否则,这是未定义的行为,这可能导致崩溃。
换句话说,如果我想读取2个前面的字节,我可以做“int * start =(int *)prt; start - = 1; int t = * start”? – cody 2013-03-14 04:38:51
@cody不,这会读取两个前面的“int”,而不是前面的两个字节。你需要在减去2之前转换成'char *',否则就是减去'2 * sizeof(int)'。 – dasblinkenlight 2013-03-14 04:42:53
赞Nitzan Shaked在评论中表示,将指针指向(char *)
,以便您可以在字节级执行指针算术。然后执行指针运算(减去需要减去的字节数),然后将其转换回需要读取的类型的指针。
- 1. 如何在C中获取内存地址并输出它?
- 2. FD_SET从无效内存地址读取?
- 3. Nodejs:读取和写入内存地址
- 4. 从16位PE读取内存地址
- 5. C++内存地址?
- 6. 如何使用C获取特定的内存地址C
- 7. 在C#中的整数内存地址#
- 8. 如何读取要存储在内存中的大块文件
- 9. 用指针+偏移量C++读取内存地址
- 10. 如何用java读取内存块
- 11. 如何在C中的地址读取字节?
- 12. 如何使用Base地址和指针读取进程内存
- 13. Java:如何在C++中存储和检索内存地址
- 14. 机器内存地址的内存地址? (C语言)
- 15. 如何在openssl AES中获取表(Te0,Te1,...)的内存地址?
- 16. C内存地址问题
- 17. c中的访问内存地址#
- 18. 阅读对象的内存地址
- 19. 字符模块布鲁斯:关闭并读取错误的内存地址
- 20. 如何在c中输入/ x00内存地址?
- 21. 如何访问文件数据在内存中后块读取C++
- 22. 如何读取内存中加载的模块的PE头?
- 23. 如何计算malloc分配的内存块的结束地址?
- 24. C:读取的地址不好
- 25. 如何使用c#访问内存中的地址?
- 26. C:“读取:错误的地址”和“写入:错误的地址”
- 27. 访问直接内存地址并获取C++中的值
- 28. gdb python模块读取内存内容
- 29. 更改存储在变量中的内存地址C
- 30. 内存地址
强制转换为char *,然后减去“x”,并获得指向前面字节的指针。就你而言,这就像一个数组。 – 2013-03-14 04:29:51
您可以像之前的评论所说的那样获取地址,但对其的访问可能未定义。例如,如果这是另一个对象正在使用的呢。 – 2013-03-14 04:33:24