C言語関係掲示板

過去ログ

No.1072 charから構造体の型にキャストはできるか

[戻る] [ホームページ]
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)


とても参考になりました。
ありがとうございました。
ソースを添付する際、以後気をつけます。