引数がポインタ変数のみ与えられた状態から、main関数内の配列要素数を調べる方法がわかりません
例として、
________________________________
void greeting(char * hello)
{
}
int main(void)
{
char gre[] = "Hello World";
greeting(gre);
return;
}
________________________________
このような状態の時、どうしたらいいのでしょうか?
あくまでgreeting関数内で調べなくてはいけないので、引数を増やすというのは無しでお願いします。
ポインタを用いた配列要素数の調べ方
Re: ポインタを用いた配列要素数の調べ方
*helloのポインタを一つずつヌル文字(\0)までチェックして行ってはどうでしょうか?
やり方は色々ありますが、まず、文字列をカウントする変数を一つ用意して*helloのポインタがヌル文字でなければカウンタを一つカウント、*helloのアドレスを一つ進めると言った具合です。
やり方は色々ありますが、まず、文字列をカウントする変数を一つ用意して*helloのポインタがヌル文字でなければカウンタを一つカウント、*helloのアドレスを一つ進めると言った具合です。
ボールを違うところに投げてたらご指摘して頂けると嬉しいです(o_ _)o
Re: ポインタを用いた配列要素数の調べ方
オフトピック
タイトルが「配列」という広い言葉になっているけど,対象は「ヌル文字で終端された文字列(charの配列)」である,という前提で良いのかな?
(そうでない,一般的な「配列」の話なのだとしたら無理だと思う)
(そうでない,一般的な「配列」の話なのだとしたら無理だと思う)
Re: ポインタを用いた配列要素数の調べ方
ご回答ありがとうございます。
________________________________
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: ポインタを用いた配列要素数の調べ方
※追記sakana13 さんが書きました: ↑2年前引数がポインタ変数のみ与えられた状態から、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: ポインタを用いた配列要素数の調べ方
ここはアドレスをヌル文字でチェックしています。
strではなくhelloではないですか?
あと*(str + count);では値を加算していることになります。
アドレスを進めなくてはなりません。
strではなくhelloではないですか?
あと*(str + count);では値を加算していることになります。
アドレスを進めなくてはなりません。
ボールを違うところに投げてたらご指摘して頂けると嬉しいです(o_ _)o
Re: ポインタを用いた配列要素数の調べ方
ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
あとは、読んだ値がヌル文字かをチェックするなどの処理があると良さそうですね。
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
str を hello に置き換えれば、hello + count でポインタ hello から count 要素進んだ位置を参照し、 *() でその位置の値を読んでいるので、正しいです。
あとは、読んだ値がヌル文字かをチェックするなどの処理があると良さそうですね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: ポインタを用いた配列要素数の調べ方
さらに、「helloからcount要素進んだ位置の値を読んでチェックする」処理の前に「countの値を増やす」処理を置いてしまうと、0文字の文字列 (最初の要素がヌル文字) が与えられた時にヌル文字を見逃してしまうので、よくないですね。
「要素数」ということは、カウントにはヌル文字の分も含めるのでしょうか?
「要素数」ということは、カウントにはヌル文字の分も含めるのでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)