• 締切済み

構造体

構造体を受け取って、メンバの値を変数に代入する部分での質問です。 lParamには構造体のアドレスが入っています。 strcpy(buf, ((struct mpoint*)lParam)->r); これによって構造体のrメンバの文字列値をbufにコピーしたいのですが、文法が違うようなので正しく直したものを教えてください。

みんなの回答

  • cats1234
  • ベストアンサー率28% (103/356)
回答No.2

#include <string.h>が未定義? 変数bufもしくはメンバ変数rが「unsigned char」等が考えられますが、いかがですか? 変数定義も補足でお願いします。

回答No.1

> 文法が違うようなので… そう判断した根拠はなんですか? strcpy(buf, ((struct mpoint*)lParam)->r); この一行だけでは判断ができません。 エラーメッセージが出たのであればその内容を。

関連するQ&A

  • c言語 構造体

    初歩の質問ですがお手柔らかに… ポインタもまだ理解しきれていません。 winapiの勉強しながらプログラムを作っています。 windows7,VisualStudio2010使用です。 struct A{ char *name; double i; } *data;//これはグローバル変数にしてあります。 (中略) (以下ダイアログプロシージャ内) TCHAR Buf[128]; GetDlgItemText(hDlg, IDC_XXXXX,Buf,(int)sizeof(Buf) -1); ここから、構造体AのメンバnameにBufの内容をコピーしたいのですが、この後を data->name = Buf ; とすると、nameのポインタがBufと同じものになり、Bufはローカル変数なのでこの関数が終わるとこのアドレスの値はめちゃくちゃになるのでnameを別の関数内では参照できなくなりました。 &(data->name) = 00C09814   &(Buf) = 002EF590 を &(data->name) = 002EF590 &(Buf) = 002EF590 として参照できるようにするのではなく、 アドレス 00C09814に アドレス002EF590の文字をコピーしてdata->nameとBufを別のアドレスで内容が同じものにしたいのです。 *(data->name + i) =*(Buf +i)をループで回してもうまくいかず、 sprintf() や strcpy() も試したのですが、コンパイルはできてもどこか不具合があるらしく、アプリケーションを動かすとこの部分で動作を停止してしまいます。 この場所で data->name = "text" とすると、問題なく文字列を代入できました。 わけのわからないことを言っている部分もありますが、どなたかご教授お願いします。

  • 構造体変数がないとメンバ操作できないのはなぜ?

    C言語の構造体に関して質問がありますが、structで型を作成して、構造体変数にてメンバの代入・参照をする。ということなんですが、なんでメンバ操作には構造体変数からでないといけないのでしょうか? 直接、型枠にてメンバ操作をすれば良いのに、なぜ構造体変数から操作しないといけないのでしょうか? 「クラス」や「オブジェクト」みたいに、一々ゼロから作成したり、コピペで作成しなくても済むように、このような形になっているのでしょうか? 回答の方よろしくお願いします。

  • 構造体のメンバ参照について(C言語)

    初めて書き込みする,taroimotenです. 以下のプログラムを作ってみたのですが, メモリ参照エラーが表示され,うまく動きません. アドバイスおねがいします! #include <stdio.h> #include <stdlib.h> // 型宣言. typedef struct data DATA; typedef struct coords COORDS; // 構造体の定義. struct data{ COORDS *pnt[3]; }; struct coords{ float r1; float r2; }; int main(void) { DATA *ptr; DATA x; // ポインタ変数の初期化. ptr = &x; // メンバへの値の代入. ptr->pnt[0]->r1 = 100.0; printf(" r1 : %f \n",ptr->pnt[0]->r1); return EXIT_SUCCESS; }

  • 構造体の変数の値を、動的に取得する方法を教えてください

    C言語で、構造体の変数の値を取得したいのですが、その際、 他の変数に格納してある文字列を元に動的に行いたいのですが、可能でしょうか? イメージとしては、 struct Entry{ char name[20]; char address[80]; char email[40]; }; struct Entry data; strcpy(data.name, "Taro"); strcpy(data.address, "Tokyo"); strcpy(data.email, "taro@taro"); char var_name[20]; strcpy(var_name, "email"); printf("%s", data.var_name); ↑この行の構造体の変数へのアクセス方法が間違っているのはわかっていますが、このような時に「taro@taro」と出力させたいのです。 var_nameの値を「name, address, email」に換える事により「Taro, Tokyo, taro@taro」と出力を切り換えたいと思っています。 普段は他の言語をよく使用しており、そちらではこの手法を時々使っていたのですが、C言語でも出来ないものかと思っております。 よろしくお願いします。

  • 異なる構造体のデータのコピー

    (1)で受け取った構造体のメンバのデータを (2)の構造体のメンバにコピーしたいと考えています。 (1) typedef struct _recvData{ int data01; int data02; char data03; char data 04; char data05; char data 06; char data07; char data08; char data09; char data10; char array01[16]; char array02[16]; } recvData; (2) typedef struct _sendData{ int header; int data01; int data02; char data03; char data 04; char data05; char data 06; char data07; char data08; char data09; char data10; int array01[4]; int array02[4]; } sendData; そこで2点ほどおしえていただきたく、お願い致します。 (1)構造体が微妙に異なるため、各メンバ変数に値をそれぞれ代入していくしか方法がないのでしょうか? (2)array01, array02はデータの型が異なる場合、データのコピーはどのようにしたらよいでしょうか?

  • 構造体について

    typedef struct num{ char rv[1000]; struct number *next; struct number *prev; }Num; このような双方向のリスト構造に void aplist(Num **s,char ns[]){ Num *old, *new; if(*s==NULL){ *s = (Num *)malloc(sizeof(Num)*1); strcpy((*s)->rv,ns); (*s)->next = NULL; (*s)->ago = NULL; return;} old= (*s); while(old->next != NULL){ old = old->next;} new = (Num *)malloc(sizeof(Num)*1); strcpy(new->rv,ns); new->next = NULL; old->next = new; new->prev = old; 関数の中でこのようにnext,oldを指定していったのですが、これでよいでしょうか?また、このリストを逆方向(prevの方向)に表示していきたいのですがどのように書けばよいでしょうか?nsは1行の文字列で、各構造体に1行ずつ入れていっています。

  • 条件によって構造体のリスト構造を変えたい

    こんにちは。 C(C++)で構造体を使っているのですが、まだまだ未熟で使い方が良く分かりません。以下のことを実施したいのですが、やり方をどなたかご教授頂けませんでしょうか。よろしくお願いします。 条件によって構造体のリスト構造を変えたいのです。 例えば、 条件1の場合は 構造体a→構造体b 条件2の場合は、 構造体a→構造体c 上記のようにです。そして構造体のルートから参照先をたどっていくことで、配下の構造体の値を取得したいのです。 文法上許されないようですが、イメージとしては、 struct a aa; aa.c->b.aa ということをしたいのです。よろしくお願いします。 struct a{ char a; char b; struct c; : }; struct b{ char aa; : }; struct c{ : : };

  • 構造体のマスクというメンバ

    一般的な構造体についての質問です。 例えば CHOOSECOLOR 構造体のようにメンバにマスクを持つ構造体があって、 その構造体に値を代入する関数を使うには、CHOOSECOLOR 構造体のマスクを 設定し、そのマスクで有効にしたメンバだけが値を入れられるんですよね? マスクを持つ構造体というのは、それに値を入れる関数を使う前に マスクを指定してから、その構造体のアドレスを関数の引数にセット するんですよね? マスクは無視されて、それ以外の全てのメンバに値が入るというわけでは ないですよね?

  • 構造体型のポインタ変数を含む構造体

    struct seiseki_tag { Int32 math ; Int32 english ; Int32 science; } ; typedef struct seiseki_tag SEISEKI ; struct personal_tag { Char name ; Int32 num ; SEISEKI *sptr } : typedef struct personal_tag PERSONAL ; struct info_tag { PERSONAL person_info ; } ; typedef struct info_tag INFO ; たとえば、上記のように3つの構造体があり、PERSONAL構造体のメンバーに SEISEKI構造体の型を持つポインタ変数が含まれているような場合で、下記のように INFO型のポインタ変数からSEISEKI構造体のメンバーを参照する方法を教えてください。 PERSONAL構造体メンバーのnameやnumは INFO *info ; info->person_info.name ; info->person_info.num ; のように参照すると思いますが、sptrが示すSEISEKI構造体のメンバーへの アクセスができません。下記のように参照を試みたのですがコンパイルは 通るのですが、実際に参照できていませんでした。 INFO *info ; SEISEKI *seiseki ; seiseki = info->person_info.sptr ; seiseki->math ; 判りにくい説明で申し訳ありませんが、どなたか教えていただければと思います。 よろしくお願いいたします。

  • 参照送りした構造体のメンバ変数の扱い方が

    自作関数に構造体のポインタを送り、メンバ変数の値を扱いたいのですが、 &で送り、*で受け取り、*とアロー演算子でメンバを指定しても 「error C2100: 間接指定演算子 (*) の使い方が正しくありません。」 と出てしまいます。 変数と構造体とでは勝手が違うのでしょうか? どうすればメンバ変数の値を扱えるのでしょうか。

専門家に質問してみよう