20

ポインター配列の長さを見つけるのに問題があります。私が持っているとしましょう:

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 を返します。これは良いことですが、状況によってはバグが発生する可能性があるように感じます。

4

5 に答える 5

16

あなたはできません、私は恐れています。配列の長さを必要な人に渡す必要があります。または、長さ自体を追跡する astd::arrayまたは類似のものを使用することもできます。std::vector

于 2013-04-02T21:17:33.873 に答える
5

C++ には適切な文字列型があります。

std::string

ここで役立つかもしれません。を受け取る関数に渡す場合でも、ポインタを受け取る関数に渡すことconst char*.c_str()できるメソッドがあります。他の関数で文字列を変更する必要がある場合は&str[0]、C++ の多くの実装で有効であり、C++11 で動作するために必要な which を使用できます。それらを正しいサイズに resize() するようにしてください。

C++ のその他のコンテナーには、次のようなものがあります。

std::array(C++11) 一定サイズの配列。メソッドがあるため、単純な古い C 配列よりも優れていsize()ます。 std::vector動的配列 (JavaArrayList相当)

あなたの質問については、指定された配列のサイズを見つける方法はありません。どうすればそれができますか?それはただのばかげたポインタです。

于 2013-04-02T21:33:25.483 に答える