1

だから、私は構造を持っています

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);
}

関数はランダムな文字を出力するだけです。ポインターのせいで頭痛がし始めています...

4

1 に答える 1

7

a のアドレス+オフセットは-へchar *ポインタchar *、つまり a ですchar **(作業部分のように、 an のアドレス+オフセットは-へintポインタint、つまり anint *です)。

したがって、定義と aceess は、型に余分な間接性を持つ必要があります。つまり、char **

char *str1 = *(char **)(data1 + offset);
于 2013-06-05T14:56:28.107 に答える