掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.25075

配列の添え字の最大値を求める方法
投稿者---ぽこぺん(2006/01/06 16:29:52)


はじめまして ぽこぺんと申します
ただいまC言語を勉強中なのですがひとつわからないことが
ありまして質問をさせていただきます。

【開発環境】
OS:Windows XP sp2
コンパイラ:VC++6.0

【質問内容】
二次元配列の添え字の最大値を知りたいのですが
なにかいい方法もしくは、関数などあるでしょうか?
いろいろ調べたのですがやり方がわからなくて困っています。

int main()
{
    char szName[4][256];

    // ここで szNameに値を設定します。

    g_GetSplitData(szName);
}

void g_GetSplitData(char pszName[][256])
{
    // この時点で、pszNameの[]部分の添え字の最大値を知りたいです。

}


以上のようなソースがあったとして、自作関数(g_GetSplitData)に
渡した時にわたってきた二次元配列の一つ目の添え字の最大値を
知りたいです。

自作関数は共通的に使用したいので、呼ぶ側で配列の列数を指定し
自作関数側で判断をしたいと思っています。

わかりづらい説明かもしれませんが
ご回答のほどよろしくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:配列の添え字の最大値を求める方法 25076 REE 2006/01/06 16:37:35
<子記事> Re:配列の添え字の最大値を求める方法 25077 Blue 2006/01/06 16:43:12
<子記事> Re:配列の添え字の最大値を求める方法 25078 たいちう 2006/01/06 17:19:53
<子記事> Re:配列の添え字の最大値を求める方法 25080 ぽこぺん 2006/01/06 18:10:12


No.25076

Re:配列の添え字の最大値を求める方法
投稿者---REE(2006/01/06 16:37:35)


>以上のようなソースがあったとして、自作関数(g_GetSplitData)に
>渡した時にわたってきた二次元配列の一つ目の添え字の最大値を
>知りたいです。
>
>自作関数は共通的に使用したいので、呼ぶ側で配列の列数を指定し
>自作関数側で判断をしたいと思っています。

引数で関数に渡すのがいいでしょう。
地味に見えて、最も汎用性があります。



この投稿にコメントする

削除パスワード

No.25077

Re:配列の添え字の最大値を求める方法
投稿者---Blue(2006/01/06 16:43:12)


多分だめのような気がします。
配列の数を知りたい場合は関数にその数を渡すのが普通です。
(Cではそうだとおもいます。)


C++であれば、VC++6はできません(と思った)が、

template <size_t size>
errno_t strcpy_s(
   char (&strDestination)[size],
   const char *strSource 
); // C++ only

のような書き方ができるらしいです。

# 最近VC2005つかって知りました。



この投稿にコメントする

削除パスワード

No.25078

Re:配列の添え字の最大値を求める方法
投稿者---たいちう(2006/01/06 17:19:53)


汎用性がぐっと落ちるけど、こんなのとか。

int main()
{
    char szName[4 + 1][256];
    szName[4][0] = '\0'; // 通常はこのようなデータがない場合
    // ...
    g_GetSplitData(szName);
}

void g_GetSplitData(char pszName[][256])
{
    int count = 0;
    while (p[count][0]) {
        count++;
    }
    // count == 4 のはず   
}

2次元配列を渡しているのではなく、1次元配列の先頭のアドレスを
渡しているにすぎないので、それがどこまで続くかは原則として
判らないわけです。

# 文字列の場合もstrlenに渡すのは、char型の先頭のアドレスだけでしょ。
# 文字列が'\0'で終了する、という特別なルールが、もしもなければ、
# strlenも文字列長がどこまで続くか判りようがないわけです。



この投稿にコメントする

削除パスワード

No.25080

Re:配列の添え字の最大値を求める方法
投稿者---ぽこぺん(2006/01/06 18:10:12)


REEさん Blueさん たいちうさんありがとうございました。
やはりわかる方法でいいのがないということですので
パラメータで個数を渡してもらうつくりにしました。

ソースまでのせていただいたのに申し訳ないです。

また何かありましたらよろしくお願いします。


>はじめまして ぽこぺんと申します
>ただいまC言語を勉強中なのですがひとつわからないことが
>ありまして質問をさせていただきます。
>
>【開発環境】
>OS:Windows XP sp2
>コンパイラ:VC++6.0
>
>【質問内容】
>二次元配列の添え字の最大値を知りたいのですが
>なにかいい方法もしくは、関数などあるでしょうか?
>いろいろ調べたのですがやり方がわからなくて困っています。
>
>
int main()
{
    char szName[4][256];

    // ここで szNameに値を設定します。

    g_GetSplitData(szName);
}

void g_GetSplitData(char pszName[][256])
{
    // この時点で、pszNameの[]部分の添え字の最大値を知りたいです。

}

>
>以上のようなソースがあったとして、自作関数(g_GetSplitData)に
>渡した時にわたってきた二次元配列の一つ目の添え字の最大値を
>知りたいです。
>
>自作関数は共通的に使用したいので、呼ぶ側で配列の列数を指定し
>自作関数側で判断をしたいと思っています。
>
>わかりづらい説明かもしれませんが
>ご回答のほどよろしくお願いします。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧