• 締切済み

文字列の構造体キャスト

文字列を構造体にキャストした際に、メンバ変数は以下のようには、 取得できないのでしょうか? typedef struct { int year; /* 学年 */ int clas; /* クラス */ int number; /* 出席番号 */ char name[64]; /* 名前 */ } student; int main(void) { student *data=NULL; char c[] = "123456789012abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij1234"; char* tmp; tmp = &c[0]; student_print(data, tmp); return 0; } void student_print(student *data, char *mkg) { void* buff = NULL;    buff = (student*)mkg; printf("[year]:%s\n", buff ->year);←ここ return; }

みんなの回答

回答No.7

>No.6 >連続したメモリ領域を構造体オブジェクトとして使いたいのなら、こういうこともできます。 >... offsetofを使ったほうがいいのでは?

回答No.6

連続したメモリ領域を構造体オブジェクトとして使いたいのなら、こういうこともできます。 #include <stdio.h> #include <string.h> typedef struct{ int year;/*学年*/ int clas;/*クラス*/ int number;/*出席番号*/ char name[64];/*名前*/ }student; void student_print(void *mkg); int main(void) { char c[sizeof(student)]=""; int *ye=(int*)c; int *cl=(int*)c+1; int *nu=(int*)c+2; *ye=1234; *cl=5678; *nu=9012; strncpy (c+3*sizeof(int),"abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij1234",63); student_print(c); return 0; } void student_print(void *mkg) { student *buff=(student*)mkg; printf("[year]:%d\n",buff->year); printf("[clas]:%d\n",buff->clas); printf("[numb]:%d\n",buff->number); printf("[year]:%s\n",buff->name); return; }

  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.5

キャストはできませんが、変換ならお望みの結果になると思います。 typedef struct { int year;/* 学年 */ int clas;/* クラス */ int number;/* 出席番号 */ char name[64];/* 名前 */ } student; ... const char* s = "3 2 1 浅井雪乃"; student data; int r; r = sscanf(s, "%d %d %d %s", &data.year, &data.clas, &data.number, data.name); ← ここ if (r == 4) { printf("[year]:%d\n", data.year); }

回答No.4

見た目、正しくすると、 http://pastebin.com/7qZJLmJR という感じでしょうか。

回答No.3

残念ながらキャストには "数字"を"数値" に変換する機能は持ち合わせておりません。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>buff = (student*)mkg; こんなことやったって buff の型が変わるわけじゃありません。 また、(student*) は構造体へのキャストではありません。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

どこか「構造体にキャスト」してるところがあるんですか?

関連するQ&A