我正在尝试创建一个数值数组,然后在获取数组值时计算for
循环中的元素。
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只是简单的本地人,在使用耳机设置玩家方面没有任何作用。
答案 0 :(得分:0)
sizeof
运算符不会执行您对原始指针变量的预期操作。它将为您提供指针变量的大小(4或8,具体取决于您的CPU目标体系结构),但不会分配给后面分配的内存。
所以
char array[42];
使用类似的函数调用时,会衰减为指针
void take_array(char* array) {
}
和sizeof将产生指针变量大小。
虽然
void take_array(char array[42]) {
}
会保留该信息,以便sizeof()
推断出来。
答案 1 :(得分: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)
我想要计算数组中的数据并将它们显示在一个循环中,所以我将这个发布给其他希望做同样但无法找到答案的人。