如果知道偏移,如何获得结构的成员?

use*_*967 1 c pointers

所以,我有一个结构

struct foo
{
  int a;
  int b;
  int c;
  char *string;
};
typedef struct foo foo;
Run Code Online (Sandbox Code Playgroud)

我有一个功能

void fun(void *data1, void *data2, int offset){
  int num1 = *(int *)(data1 + offset);
  int num2 = *(int *)(data2 + offset);
  printf("%d %d\n", num1, num2);
}
Run Code Online (Sandbox Code Playgroud)

而且效果很好.但是当我尝试用字符串做同样的事情时出了点问题.

void fun(void *data1, void *data2, int offset){
  char *str1 = (char *)(data1 + offset);
  char *str2 = (char *)(data2 + offset);
  printf("%s %s\n", str1, str2);
}
Run Code Online (Sandbox Code Playgroud)

函数只打印一些随机字符.由于指针我开始变得头疼...

Nic*_*laz 7

a的地址+偏移量char *是一个指针 - char *换句话说,它是一个char **(就像在你的工作部分中,地址+偏移量int是一个指针指向 - int,即它是一个int *).

因此,定义和aceess需要在类型中具有额外的间接,即 char **

char *str1 = *(char **)(data1 + offset);
Run Code Online (Sandbox Code Playgroud)