質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

444閲覧

C:構造体の入れ子が何層になっているか知りたい

Ykkykk

総合スコア140

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/06/04 07:54

入れ子状の構造体がある場合、それが何層になっているか知りたいのですが、どのようにすれば良いのでしょうか?

C

1struct example { 2 struct example *next; 3 char *sample; 4 .... 5};

上記のように入れ子状になっている構造体がある時に、それが何個入れ子になっているかを知りたいです。

C

1int i = 0; 2struct example *test; 3test = すでにバッファにある構造体example; 4while (test != NULL){ 5 i++; 6 test = test->next; 7}

上記のようにすればとりあえず取得できるかと思うのですが、入れ子状になった構造体が何層になっているか数えた値を上記のようなすべての入れ子状になった構造体に対して行う処理で使いたいです。

ご教示くださいますと幸いです。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2020/06/04 08:13

問題点が何なのかわかりません. タイトルの「構造体の入れ子が何層になっているか知りたい」に関しては, > 上記のようにすればとりあえず取得できるかと思うのですが という話で解決しているのだと思われます. 「数えた値を,以降の何らかの処理で使いたい」という話に関しては,何が障害になっているのかがわかりません.(使いたいなら使えばよいのでは?)
guest

回答1

0

ベストアンサー

入れ子状になった構造体が何層になっているか数えた値を上記のようなすべての入れ子状になった構造体に対して行う処理で使いたいです。

取得した直後に「すべての入れ子状になった構造体に対して行う処理」を実行すればいいだけかと思います。

投稿2020/06/04 07:56

maisumakun

総合スコア145123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ykkykk

2020/06/04 08:00

ご回答ありがとうございます。 直後に再度whileループを同じ条件で回すとwhileループの中に入っていかないため、カウントするためのwhileループで構造体のアドレスを進め切ってしまいNULLになっているのかと思ったのですが、そういったことはないのでしょうか。。。?
episteme

2020/06/04 08:04

そう思ったならやってみれば?
Ykkykk

2020/06/04 08:05

言葉が不適切でしたが、やってみたところそうなっていたので質問いたしました。すみません。
maisumakun

2020/06/04 08:07

> 直後に再度whileループを同じ条件で回すと testの初期化もせずに回せば、そうなります。
episteme

2020/06/04 08:07

そんなコード書いたからでしょう。見てみんことにはなんとも言えません。
Ykkykk

2020/06/04 08:11

一番初めに初期化してからであれば二回目もNULLにはならずにwhileで回せるということでしょうか?
maisumakun

2020/06/04 08:13

> 一番初めに初期化してからであれば二回目もNULLにはならずにwhileで回せるということでしょうか? 全く逆です。2回目に回す前にも「test = すでにバッファにある構造体example;」を行ってください。
Ykkykk

2020/06/04 08:15

なるほど。。。 やってみたところ考えていたように動きました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問