我有以下代码:
修改的
....int l=0
char* FantasiaGameUtils::GetCurrentTask(char *chat_arg)
{ // I know the code looks disgusting but please ignore that as I am only testing now
static char *szTemp1="";
for(int i=0; i<loop; i++)
{
if(task[i][0]!=0)
{
sif (l==0)
{strcpy(chat_arg, task[i]);
}
else
{strcpy(chat_arg, task[i+1]);
}
strcpy(task[i], "");
if (szTemp1!="")
{
MessageBox(0, szTemp1, "szTemp Value", 0);
MessageBox(0, chat_arg, "Initial Value", 0);
return chat_arg != szTemp1 ? chat_arg : NULL;
} else {
l++;
szTemp1 = chat_arg;
MessageBox(0, szTemp1, "szTemp1 Value", 0); // @execute
return chat_arg;
}
}
strcpy(chat_arg, "");
}
return false;
}
修改的
我要做的是让返回序列检查前一个返回的值,如果它与当前值不同,则返回当前值chat_arg
,如果是,则返回NULL。 / p>
此功能的目的是从global_chat获取用户提示。提示的示例是!create <game-type> <game-time> <max-players>
此提示将由每个单词输入(在每个空格之后)分别存储到task [] []数组中。
从那里开始,这个功能发挥作用。它应该将当前任务值(当前单词)复制到chat_arg变量中。
我遇到的问题是,由于某种原因,我的主要游戏循环中的每一个。 chat_arg的值保持在整个游戏循环中。我想清除这个价值。我已经提出了这种方法,我将检查函数中的当前值是否与前一个相同,如果是,则返回NULL(清除值),如果不是,那么没有理由清除之前的值,所以返回当前值。
任何人都可以通过更好或更好的方式执行此检查吗?或者任何人都可以告诉我如何从内存中获取以前返回的值并检查当前值?感谢您!
答案 0 :(得分:0)
1)在帖子中添加C++
标记,因为它不是纯C
代码。
for(int i=0; i < loop; i++) // This line will not compile using C compilers.
2)在下面的行中更好地返回0
。 false
与您期望的char*
不匹配。
return false; -> return 0;
我的问题解决方案:
1)创建全局变量,并将本地chat_arg
与之进行比较。
extern char* g_prev_chat_arg = 0;
...
char* FantasiaGameUtils::GetCurrentTask(char *chat_arg)
{
...
//return chat_arg != /*previous return value*/ ? chat_arg : NULL;
if (0 == strcmp(chat_arg, g_prev_chat_arg))
{
return 0;
}
else
{
g_prev_chat_arg = chat_arg;
return chat_arg;
}
...
}
2)在您的函数static
中创建本地char* FantasiaGameUtils::GetCurrentTask(char *chat_arg)
变量,并像上面一样使用它,
3)将代码存储在char* FantasiaGameUtils::GetCurrentTask(char *chat_arg)
的代码最后返回值的某处,然后在每次调用时传递GetCurrentTask(...)
char* FantasiaGameUtils::GetCurrentTask(const char* prev_chat_arg, char* chat_arg)