所以,我有一个结构
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);
}
功能只打印一些随机字符。我因为指针而开始变得头痛......
答案 0 :(得分:7)
char *
的地址+偏移是指向的指针 - char *
,换句话说,它是char **
(就像在你的工作部分一样) ,int
的地址+偏移量是指向的指针 - int
,即它是int *
)。
因此定义和aceess需要在类型中有一个额外的间接,即char **
char *str1 = *(char **)(data1 + offset);