wiki@y-kurose

日々是好日。

ユーザ用ツール

サイト用ツール


プログラミング:c言語:構造体とキャスト_実験

構造体とキャスト(実験)

C言語でソケット通信をする際に使う二つの構造体

  • ソケットに関する構造体
    • 汎用的な構造になってるsockaddr
    • IPアドレスやポート番号をセットするsockaddr_in
  • 両者のサイズは同じで、sockaddrの方がオブジェクト指向言語でのインターフェースのような感じになっている
    • 実際、sockaddr_inに値をセットした後、sockaddrにキャストして使うことが多い
    • IPアドレスなどを取り出したい時には、まずsockaddr_inのポインタが欲しくなるので、逆にsockaddrのポインタをキャストする

IPアドレスとポートを引数としてsockaddrを返す関数を作りたい

  • 本来は参照渡しで書くのだろうが、無理やりsockaddrの実態を返す
  • 深く考えずにキャストして返そうとしたらエラー
struct sockaddr ret;
struct sockaddr_in address;
ret = (struct sockaddr)address;
  • そこでaddressのアドレスをsockaddrのポインタにキャスト
  • そのポインタのさす先を取り出すよう書き換えたところコンパイル通った
ret = *((struct sockaddr*)&address);

注意

  • あくまで実験(お遊び)のため、真似しないように
    • 本来はこういう風に書かれる想定ではないはずですので、不具合が起きても責任取れない


プログラミング/c言語/構造体とキャスト_実験.txt · 最終更新: 2019/10/05 22:36 by y-kurose