• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語にて構造体のメンバがNULLであるかを判定するサンプルを作成して)

C言語で構造体メンバがNULLかどうかを判定するサンプル

このQ&Aのポイント
  • C言語で構造体のメンバがNULLかどうかを判定するサンプルを作成しました。
  • 構造体のメンバがNULLかどうかを判定するために、指定した構造体のメンバが0x00であるかどうかを比較し、結果を出力します。
  • このサンプルでは、構造体のメンバであるnameがNULLかどうかを判定しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

1)先頭が'\0'でない文字列をmemcpy()したのだから、*st_test.nameは'\0'でないのに   決まっている。そもそも'\0'との一致判定をすることに意味があるのかどうか。 2)標準関数のプロトタイプ宣言を行なっているヘッダーファイルをインクルードしていない。 3)&buf[0]はbufと省略できる点を理解しているかどうか。 4)memcpy()で、文字列終端を含めて11バイトのデータを10バイトの領域にコピーしている。   プログラムの仕様として正しいかどうか。 5)#1さんの回答のとおり、NULLと'\0'との違いをじゅうぶん理解できているかどうか。

19820202
質問者

補足

1)*st_test.nameだとst_test.name[0]しか比較対象にならないのですか? 2)インクルードは省略して記載しています。 3)ポインタである事を明示的にするためにあえて&buf[0]と記載しています。 4)文字列終端は入れない想定です。 5)確かにNULLポインタと'\0'を混同していました。

その他の回答 (3)

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

ポインタp に対して *p と p[0] は同じ.

19820202
質問者

補足

>ポインタp に対して *p と p[0] は同じ  これが理解できていなかったのが問題でした。p[0]~p[n]までループして一つずつ0x00にて  比較すれば良いという事になりますね。もしくは空バッファを用意してmemcmpでもいけそう  ですね。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

>memcpy(&st_test.name[0],"aabbccddee",sizeof(st_test.name)); サイズ決め打ちの転送だが、短いデータをコピーする場合無駄が出る。場合によってはアクセス例外が出来る可能性もある。 >4)文字列終端は入れない想定です。 文字列終端がない場合、strcpy等は使えないしstrlenも使えない。じゃあ文字列の長さは持たなくて良いのか? あとbufが何のためにあるか分からない。

19820202
質問者

補足

>サイズ決め打ちの転送…  文字列終端が無いためmemcpyでサイズ指定で項目移送する必要があります。 >文字列終端がない場合、strcpy等は使えないしstrlenも使えない…  領域のサイズ分データが入る設計です。電文に乗せたりするデータですので、strcpy等は使用しません。 >buf  不要です。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

NULL(空ポインタ)とナル文字はまったく別の概念です。 実際にはどちらの判定をしたいのでしょうか?

19820202
質問者

補足

ナル文字の判定が行いたいです。