2016-11-12 103 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只是在使用耳機設置播放器時不起作用的hud本地人。

+1

請發送真實的編碼。理想情況下,[MCVE]完全重現您的問題。 –

+0

我編輯了問題先生。 – BigJohn863

回答

0

sizeof運算符沒有達到您期望它對原始指針變量所做的操作。它會給你指針變量的大小(4或8取決於你的CPU目標體系結構),但不是分配給後面的內存。

所以,當用函數調用等

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) 

我想指望在一個陣列中的數據,並在循環中顯示出來,所以我張貼這對任何人誰願意做同樣的,並不能找到答案。