• ベストアンサー

配列の要素を取得する場合?

char a[] = "aaaaa"; char *b = "aaaaa"; という宣言があるとき、配列aなら、 sizeof(a)/sizeof(a[0]); で、全体の要素数を求められますが、bの方法で初期化をして、 sizeof(b) / sizeof(b[0]) をやっても、変数bのサイズしか求められません。 bの方法でも、最大要素数を求めることはできますか?

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

  • ベストアンサー
回答No.1

そもそも、b の宣言は、配列とは無関係なので、「最大要素数」というものを求めることはできません。 文字列の長さであれば、strlen() という関数で求められます。 strlen(b); それは、sizeof(a) は、「配列の大きさ」を返しますが、 sizeof(b) は、「char 型へのポインタ」の大きさを返すからです。 このあたり、実は、a と b は、(同じように使える場面が多いのですが)別物だというのが理解できると、次のステップに進みやすくなります。

potch
質問者

お礼

回答ありがとうございます。 bはあくまでも、ポインタなんですね。strlen()のことも自分で調べてみようと思います。

その他の回答 (1)

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.2

*b(ポインタbが指す領域)の要素数を b だけを使って求めることはCでは不可能です。そういう言語仕様ですので。 Ano1で説明されているように、もし文字列(Cの文字列)をbが指しているのであればstrlenで長さが分かります(末尾の \0 を除いた長さが帰ります)。これはあくまでも \0が先頭から何バイト目に出てくるかを数えているだけです。

potch
質問者

お礼

回答ありがとうございます。 やはり、無理なんですね。貴重な情報ありがとうございました。

関連するQ&A