ポインタを用いた配列要素数の調べ方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: ポインタを用いた配列要素数の調べ方

Re: ポインタを用いた配列要素数の調べ方

#10

by みけCAT » 1年前

さらに、「helloからcount要素進んだ位置の値を読んでチェックする」処理の前に「countの値を増やす」処理を置いてしまうと、0文字の文字列 (最初の要素がヌル文字) が与えられた時にヌル文字を見逃してしまうので、よくないですね。

「要素数」ということは、カウントにはヌル文字の分も含めるのでしょうか?

Re: ポインタを用いた配列要素数の調べ方

#9

by みけCAT » 1年前

ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
幸尚 さんが書きました:
1年前
strではなくhelloではないですか?
あと*(str + count);では値を加算していることになります。
アドレスを進めなくてはなりません。
str を hello に置き換えれば、hello + count でポインタ hello から count 要素進んだ位置を参照し、 *() でその位置の値を読んでいるので、正しいです。
あとは、読んだ値がヌル文字かをチェックするなどの処理があると良さそうですね。

Re: ポインタを用いた配列要素数の調べ方

#8

by 幸尚 » 1年前

コード:

while(hello != '¥0')
ここはアドレスをヌル文字でチェックしています。

コード:

*(str + count);
strではなくhelloではないですか?
あと*(str + count);では値を加算していることになります。
アドレスを進めなくてはなりません。

Re: ポインタを用いた配列要素数の調べ方

#7

by sakana13 » 1年前

sakana13 さんが書きました:
1年前
引数がポインタ変数のみ与えられた状態から、main関数内の配列要素数を調べる方法がわかりません

例として、
________________________________
int greeting(char * hello)
{
int len;
〜要素数を調べる処理〜
return len;
}

int main(void)
{
char gre[] = "Hello World";

printf("%d",greeting(gre));

return;
}
________________________________
このような状態の時、どうしたらいいのでしょうか?
あくまでgreeting関数内で調べなくてはいけないので、引数を増やすというのは無しでお願いします。
※追記
greeting関数の戻り値がvoidになっていますがint型の間違いです
正確にはreturnで要素数を返したい、というものです
書き方がなっておらず申し訳ありません

Re: ポインタを用いた配列要素数の調べ方

#6

by sakana13 » 1年前

usao さんが書きました:
1年前
オフトピック
タイトルが「配列」という広い言葉になっているけど,対象は「ヌル文字で終端された文字列(charの配列)」である,という前提で良いのかな?
(そうでない,一般的な「配列」の話なのだとしたら無理だと思う)
ご回答ありがとうございます
「ヌル文字で終端された文字列」で合っています!
情報が足りず申し訳ありません;

Re: ポインタを用いた配列要素数の調べ方

#5

by sakana13 » 1年前

幸尚 さんが書きました:
1年前
*helloのポインタを一つずつヌル文字(\0)までチェックして行ってはどうでしょうか?

やり方は色々ありますが、まず、文字列をカウントする変数を一つ用意して*helloのポインタがヌル文字でなければカウンタを一つカウント、*helloのアドレスを一つ進めると言った具合です。
ご回答ありがとうございます。

________________________________
int greeting(char * hello)
{
int count = 0;
int len;  //要素数

while(hello != '¥0')
{
count++;
*(str + count);
}

len = count;
return len;

}

int main(void)
{
char gre[] = "Hello World";

printf("%d",greeting(gre));

return;
}
________________________________

greeting関数内を書き換えてみたのですが、ビルドをかけても何も表示されず…
どこに問題があるのでしょうか?

Re: ポインタを用いた配列要素数の調べ方

#4

by usao » 1年前

オフトピック
タイトルが「配列」という広い言葉になっているけど,対象は「ヌル文字で終端された文字列(charの配列)」である,という前提で良いのかな?
(そうでない,一般的な「配列」の話なのだとしたら無理だと思う)

Re: ポインタを用いた配列要素数の調べ方

#3

by 幸尚 » 1年前

後は、strlen()関数を使うという手もあります。

Re: ポインタを用いた配列要素数の調べ方

#2

by 幸尚 » 1年前

*helloのポインタを一つずつヌル文字(\0)までチェックして行ってはどうでしょうか?

やり方は色々ありますが、まず、文字列をカウントする変数を一つ用意して*helloのポインタがヌル文字でなければカウンタを一つカウント、*helloのアドレスを一つ進めると言った具合です。

ポインタを用いた配列要素数の調べ方

#1

by sakana13 » 1年前

引数がポインタ変数のみ与えられた状態から、main関数内の配列要素数を調べる方法がわかりません

例として、
________________________________
void greeting(char * hello)
{
}

int main(void)
{
char gre[] = "Hello World";

greeting(gre);

return;
}
________________________________
このような状態の時、どうしたらいいのでしょうか?
あくまでgreeting関数内で調べなくてはいけないので、引数を増やすというのは無しでお願いします。

ページトップ