所以,我有一个结构
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)
函数只打印一些随机字符.由于指针我开始变得头疼...
a的地址+偏移量char *是一个指针 - char *换句话说,它是一个char **(就像在你的工作部分中,地址+偏移量int是一个指针指向 - int,即它是一个int *).
因此,定义和aceess需要在类型中具有额外的间接,即 char **
char *str1 = *(char **)(data1 + offset);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |