ポインタから配列の長さを取得するにはどうすればいいですか? [重複] 質問する

ポインタから配列の長さを取得するにはどうすればいいですか? [重複] 質問する

ポインタ配列の長さを見つけるのに苦労しています。次のようなものがあるとします。

char array[40] = "hello"; // size 40
int length =  sizeof array / sizeof array[0]; // no problem returns 40

//配列の最初の要素へのポインターのみを使用して配列の長さを取得するにはどうすればよいですか?

 char* pchar = array;

//もし

std::strlen(pchar); // this returns the length of 5... i want length 40

//もし

int count = 0;
while(true)
{
  if(*(pchar + count) == '\0') // returns 5...
    break;
   count++;
}

配列の最初の要素へのポインタから長さ 40 を返すようにするにはどうすればよいでしょうか?
これが可能であることがわかりました。

int count = 0;
    while(true)
    {
      if(*(pchar + count) == '\0' && *(pchar + count + 1) != '\0') 
             break;

       count++;
    }

これは 39 を返します。これは良いことですが、状況によってはバグが発生する可能性があるように感じます。

ベストアンサー1

残念ながら、それはできません。配列の長さを、それを必要とする人に渡す必要があります。または、長さを追跡するstd::arrayやなどの関数を使用することもできます。std::vector

おすすめ記事