No.14067![]() |
キャストについて 投稿者---いなほ(2004/05/16 23:11:12) |
||
いつも利用させて頂いています。 わからないことがあるのですが、 charから構造体の型にキャストはできるのでしょうか。 できれば構造体に一括代入したいのです。 いろいろ調べてみたのですがわかりません。 よろしくお願いいたします。 |
No.14068![]() |
Re:キャストについて 投稿者---YuO(2004/05/16 23:27:01) |
||
>charから構造体の型にキャストはできるのでしょうか。 できません。 void型にキャストする場合を除いて, キャストされる式の型及びキャスト後の型は, スカラ型(=整数型・浮動小数点型・ポインタ型)である必要があります。 |
No.14069![]() |
Re:キャストについて 投稿者---いなほ(2004/05/16 23:52:00) |
||
教えていただきありがとうございます。 やはりできないのでしょうか? typedef struct a{ char name[20]; char add[30]; }member; member *pbook; char buf[50]; if((fp=fopen("data.txt","r"))==NULL){ エラー処理 } pbook = (typBook *)malloc(sizeof(typBook) ); fgets(buf,50,fp); pbook=(member *)buf; とこのようにソースは少し省略していますが、 ファイルから読んだものを構造体にいれたいのですが一括代入はできないのでしょうか? よろしくお願いいたします。 |
No.14072![]() |
Re:キャストについて 投稿者---RAPT(2004/05/17 00:36:58) |
||
fgets(pbook->name, 20, fp); fgets(pbook->add, 30, fp); でいいのでは? もしくは、strncpy()等を使うとか。 データ形式の仕様によっては、strtok()やsscanf()等も使えるでしょう。 |
No.14073![]() |
Re:キャストについて 投稿者---シャノン(2004/05/17 00:53:33) |
||
てか member book; fread( &book, sizeof( member ), 1, fp ); で一発?ダメ? |
No.14074![]() |
Re:キャストについて 投稿者---YuO(2004/05/17 07:31:48) |
||
【掲示板ご利用上の注意】の, >ソースを添付する際には「HTML変換ツール」で字下げしてください。 を守ってください。 短いソースとはいえ読みにくいです。 >ファイルから読んだものを構造体にいれたいのですが一括代入はできないのでしょうか? 同一構造体同士の代入は可能なので,ポインタを変換することにより, *pBook = *(member *)buf; のようなことは可能です。結果がどうなるかは知った事じゃありませんが。 #ポインタの変換とはそういうこと。 現実的に意味があるのは,RAPTさんやシャノンさんの方法だと思います。 上記の方法では,nameがナル文字で終端しないかaddに情報が入らないかの何れかになります。 |
No.14084![]() |
ありがとうございました。 投稿者---いなほ(2004/05/17 23:34:45) |
||
とても参考になりました。 ありがとうございました。 ソースを添付する際、以後気をつけます。 |