2016-11-12 4 views
-4

配列の値を取得しようとしているときに、配列の数値を作成しようとしていて、forループの要素を数えようとしています。C++配列のループ問題

if (ShowTalkingPlayers) 
{ 
    memset(TALKING, 0, sizeof(TALKING)); 
    char *Talker; 

    for (int i = 0; i < PLAYER::GET_NUMBER_OF_PLAYERS(); i++) 
    { 
     if (NETWORK::NETWORK_PLAYER_HAS_HEADSET(i)) 
     { 
      Talker = PLAYER::GET_PLAYER_NAME(i); 
      if (NETWORK::NETWORK_IS_PLAYER_TALKING(i)) snprintf(TALKING, sizeof(TALKING), "Mic: ~g~%s", Talker); 
      else snprintf(TALKING, sizeof(TALKING), "Mic: ~b~%s", Talker); 

      Do_ShowTalkingPlayers(TALKING, i); 
     } 
    } 
} 

これは、すべての18人の選手ではなく、ヘッドセットを持っているだけで選手をループしていますので、それは選手名の間にスペースを作成します...問題がある作業コードです。私はこの前にforループをやっていると思っていたので、アレイ内にヘッドセットを持っているユーザIDを収集し、アレイデータをループして、話すプレイヤーを表示することができます。

DO_SHOWTALKINGPLAYERSは、単にヘッドセットでプレーヤーを設定する役割を果たしていない偽のネイティブです。

+1

実際のコードを投稿してください。理想的にはあなたの問題を正確に再現する[MCVE]。 –

+0

質問を編集しました。 – BigJohn863

答えて

0

sizeof演算子は、未加工のポインタ変数とは何をするのでしょうか。これは、ポインタ変数(CPUターゲットアーキテクチャに応じて4または8)のサイズを与えますが、後ろに割り当てられたメモリのサイズにはなりません。

void take_array(char* array) { 
} 

およびsizeofポインタ可変サイズをもたらす内のような関数で呼び出されたときにそう

char array[42]; 

はポインタに減衰します。

void take_array(char array[42]) { 
} 

ながらsizeof()により推定されているため、その情報を保持します。

0

私は、このサイトの誰かが投稿したカスタムForeachループを使用して、望ましい結果を達成することができました。私の質問に投票した皆さん、ありがとうございました。

#define foreach(item, array) \ 
for(int keep = 1, \ 
     count = 0,\ 
     size = sizeof (array)/sizeof *(array); \ 
    keep && count != size; \ 
    keep = !keep, count++) \ 
    for(item = (array) + count; keep; keep = !keep) 

私は、配列内のデータをカウントし、ループ内でそれらを表示したいたので、私は同じことを行うことを望むと答えを見つけることができません誰のためにこれを掲示しています。