所以,我有一个结构
struct foo
{
int a;
int b;
int c;
char *string;
};
typedef struct foo foo;
我有一个函数
void fun(void *data1, void *data2, int offset){
int num1 = *(int *)(data1 + offset);
int num2 = *(int *)(data2 + offset);
printf("%d %d\n", num1, num2);
}
而且效果很好。但是当我尝试对字符串执行相同操作时出现了问题。
void fun(void *data1, void *data2, int offset){
char *str1 = (char *)(data1 + offset);
char *str2 = (char *)(data2 + offset);
printf("%s %s\n", str1, str2);
}
函数只是打印一些随机字符。指点的我开始头疼了...
最佳答案
char *
的地址+偏移量是一个指针-char *
,换句话说它是一个 char **
(就像在您的工作部分中一样,int
的地址+偏移量是一个指针-int
,即它是一个 int *
)。
因此定义和访问需要在类型中有一个额外的间接寻址,即 char **
char *str1 = *(char **)(data1 + offset);
关于c - 如果已知偏移量,如何获取结构成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16943084/