• ベストアンサー

BCBで配列の要素数(0)の場合

OS:Windows XP Pro Borland C++ Builder Pro v5.0 配列の要素数を取得したいのですが(要素数が0の場合も含む) どのようにしたらよいかわかりません。 どなたか、ご存知でしたらご教授願います。

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

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

int array[123]; という配列の要素数を知りたいのであれば、 size_t count = sizeof array / sizeof array[0]; とすれば取得可能です。 ただし、一度ポインタにしてしまうと、もはや要素数を知るすべはありません。要素数の情報を落とさずにポインタを扱うには、 int (*p)[123] = &array; とする必要があります。 もし、関数に渡したいのであれば、 template <int N> void func(int (&array)[N]); のようにすれば、要素数の情報を保ったまま、配列を参照渡しする汎用的な手段が得られます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.4

一番簡単なのは、読み込んだときにそれぞれが何個読んだかを確認することかと。引数で渡すなりする。 関数内で判断しようとしているのなら、#2の方が指摘されているような問題があります。 一応、(ポインタ配列で)配列数としては有効、要素がNULLということであれば、こんな感じでもいいのかも。 // file1,file2が配列、nが現在のインデクス(ループと過程 if(file1[n] != NULL && file2[n] != NULL) { // 実際の比較 } もしくは、 if(file1[n] == NULL || file2[n] == NULL) break; 読み飛ばした後に要素があるのか、インクリメントするのか、などの仕様がわからないので、あくまで例示ですが。 NULLとかかれているものが、配列の範囲外で有効でない場合、そこを評価するのは不正です。 (例えばarray[5]分しかないなら、array[5]の中を見てはいけない)

全文を見る
すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

肝心なことを書き忘れていました。 Borland C++ Builder Pro v5.0では、要素数が0の配列を宣言することはできなかったと思います。具体的にはどんな状況を想定していますか?

goopoo
質問者

補足

ご回答ありがとうございます。 ファイル1の内容を配列1に、ファイル2の内容を配列2に格納し、配列1と配列2の内容を順に比較する処理です。 片方の配列のデータが無い場合(nullの場合はデータがあると判断)で処理を分岐させようとしてエラーとなりました。 このため、配列の要素数を求めて処理を行うようにしたいと考えております。

全文を見る
すると、全ての回答が全文表示されます。
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

foo という配列だったとして、 std::size_t siz = sizeof(foo)/sizeof(foo[0]); が定石でしょうか。 # vectorとかならsize()とかありますが。 ちなみに要素数ゼロの配列は言語仕様では許されてません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Cなどで要素の数が固定できない配列はどうやって実現しますか?

    配列について質問します。 BASIC系では配列は動的配列で要素の数が自由に変えられます。 ですが、C等では宣言時に配列の要素の数を決めておかねばならなかったと思います。 もし、C等で要素の数がわからないけど、配列を使いたい場合、どうすればいいのでしょうか? どのように実現するのでしょうか? 配列と同じ使い勝手なら配列でなくともかまいません。 今はVBAでプログラムを組んでいるので、動的配列を使えばすむのですが、いずれ他の言語に移植したいので、できるだけ使わないようにしたいと思っています。 よろしくお願いいたします。

  • 動的にメモリを確保した配列の要素数を調べるには

    いつもお世話になります。 int *test; *test= malloc(sizeof(int)*10); とした場合、test[10]と扱える配列の要素数(この例だと10)を 取得するにはどのようにすればよろしいのでしょうか? 通常の要素数を取得する sizeof(test)/sizeof(test[0]) とかだと無理っぽいですし。。。 どなたかご存知の方どうぞよろしくお願いします。

  • 配列で、値の入っている要素数を返すには?

    配列abcの長さを取得するには、abc.lengthを使いますよね。 仮にString型の配列abc[20]があったとします。要素数を調べるには、abc.length とすれば、20が返ってきます。 そこで、どこまで、要素が入っているかを調べたい場合、どうするんですか? 例えば、abc[10]まで、要素が入っていて、残りは全部要素が入ってないとします。その時、10を返してくれる、そのようなメソッドはあるんでしょうか? 私がAPIで調べたら、ありませんでした。代表的なアルゴリズムでもいいので、誰か知っている人がいたら教えて下さい。 自分で作ってみたんですが、一般的にはどのようなやり方でやっているのか知りたいので、お願いします。

    • ベストアンサー
    • Java
  • 配列の要素数に変数を入れたいときには

    よろしくお願いします。 配列の要素数には定数しか入れられないのですが,どうしても変数を入れたいときは,それを引数として関数を呼び出すしか方法はないでしょうか。 具体的には,scanfで手に入れたint型の変数を要素数とする配列を宣言したいのですが,どうすれば良いでしょうか。 ご教授ください。

  • 配列の要素数について

    下記の記述の場合、配列の要素数っていくつになりますか? Dim strArray() As String ReDim strArray(0) また下記のように、配列の要素数を具体的に書かずに使った場合不具合はでますか? Dim strArray() As String strArray(0) = "aa" strArray(1) = "bb"

  • perl 配列の要素数について

    配列の要素数について質問させていただきます。 プログラムの中で、以下のようにファイルの内容を1行ずつ読み込み、配列に入れています。  open (IN, "ファイル名");  @data = <IN>;  close (IN); こういった形で配列に入れていった場合、入れられる最大行数(=最大要素数)はどれくらいになるのでしょうか。 現在100万行のテキストファイルは、問題なく読み込めているようでした。 ご存知の方がおられましたら、ご回答いただければと思います。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 配列の要素数を調べる方法

    配列の中にいくつ要素があるか後から調べる方法はあるでしょうか? int test[4][3] = {   {0,1,2},   {0,1,2},   {0,1,2},   {0,1,2}, } ; 上のケースだと、X方向に3、Y方向に4つの 要素があります。しかし、これだとあらかじめいくつ要素があるかを決めて 置かないといけません。 例えば、 int test[] = {0,1,2,3....} みたいに宣言された場合や、 char *test[] = {   "ああああああ",   "いいいいいい",   "うううううう",      ・      ・ //(これは文字列の数を要素数とします) } ; のように宣言された二次元配列などで、後から配列内にいくつ要素があるかを 調べることなどは可能でしょうか?

  • BCB5からBCB6へのコンポーネント移行でエラー

    OS:Windows XP Pro .pasのコンポーネントをインストールしようとすると下記のエラーが発生します。 [リンカエラー]外部シンボル'__fastcall Outline::TCustomOnline::~TCustomOutline()'が未解決(C:\Program Files\Borland\CBulder6\LIB\BCBSMP.LIB|.\cdiroutl.cppが参照) どなたか原因等知っていましたらご教授願います。

  • 配列の要素数を超えた参照のコンパイル

    C言語においては”配列の要素数を超えての参照もコンパイルエラーにはならない”という事がいえます。 例えば int a[10]={1}; とした時、a[-1] a[11]を参照しても、コンパイルエラーにはなりません。不定値が表示されるか、Red Hat Linuxに関しては”セグメンテーション違反です”とでるだけです。 しかし、わたしはCしか学んではいませんので解りませんが、配列の要素数を超えての参照はコンパイルエラーになる言語もあるのではないかと思います。 C言語はよく”暴走する言語”と言われます。規制をできる限り排除して軽くし、ミスはプログラマが取るという意味に考えています。 ”C言語においては配列の要素数を超えての参照もコンパイルエラーにはならないという事”はC言語のその様な設計思想に基ずいた仕様なのでしょうか。 それとも、違う考えに基ずいて、”配列の要素数を超えての参照もコンパイルエラーにはならない”という事に成っているのでしょうか。 宜しく願います。

  • 配列とその要素数をメンバにもつ構造体

    C言語では,配列を引数とするときに,合わせて要素数を渡さなければいけないといわれます. そこで,配列とその要素数をメンバにもつ構造体を定義して,これを要素数つき配列のように扱えば,引数として渡す場合には,この構造体を渡すだけでよいと思うのですが,このような用法は一般的に用いられているでしょうか. 単純なアイデアだと思うんですが,あまり紹介されているのを見たことがありません. もしあまり用られない用法であれば,その理由を教えてください. 現在,プログラムを書いているのですが,引数の多さに閉口しており,上の考えで,引数を減らしたいと考えています.  よろしくお願いいたします.