如何清除(char*)中的缓冲区

How to clear the buffer in a (char*)?

本文关键字:缓冲区 char 清除 何清除      更新时间:2023-10-16

在我的程序中,我有一个char* buffer,它在线程序列中使用,该线程序列将文本从一个函数传递到另一个函数,但在程序的运行时,文本是不同的。我要问的问题是,我可以使用哪个函数从char*中清除以前使用的文本?

例如,我有以下代码:

int GameUtils::GetText(char *text)
{
    for(int i=0; i<LINES_OF_TEXT; i++)
    {
        if(line[i][0]!=0)
        {
            strcpy(text, line[i]);
            MessageBox(0, text, 0, 0);
            line[i][0]=0; 
            return 1;
        }
   }
   return 0;
}

line定义如下:char GameUtils::line[2][32];

当屏幕上输出消息框时(执行代码时)。我在文本字段中得到一些随机的垃圾字符。有人能告诉我为什么会这样吗?

还有!请注意,这一行是按照我之前的问题中所述分配的。

分配line的函数是:

for (int x=0; x<((int)(strlen(szLine)+1)); x++)
{
    if (szLine[x]==' ' || szLine[x]=='')
    {
        m=x;
        for (y=0, z=n; z<m; y++, z++)
        {
            line[w][y]=szLine[z];
        }
    n=x+1;
    w++;
    }
}

上面的函数只是取一个从我的游戏界面传来的参数szLine[512],并将每个空间的行划分为一个新的参数。

举个例子,如果在游戏中,用户声明以下行:

/msg <player> <message>

该函数会将每个单独的单词分别分配给line变量。

这样,在功能完成之后。line看起来像

line[0] = /msg
line[1] = <player>
line[2] = <message>

因此,我的问题总体如下。对于这个问题,我是否采取了最干净/最合适的方法?如果没有,有人能告诉我解决这个问题的更好方法吗?另外,有人能向我解释一下为什么在执行消息框时,text参数中会出现垃圾字符吗?

编辑

在查看了我提交的问题的预览后;我注意到我已经将char GameUtils::line[2][32]定义为一个2维数组。我早些时候这样做是为了测试。我现在明白了这可能是我问题的原因。如果我不知道可以输入到这个变量中的确切参数数量,有人能建议我替换它吗。用户每次都可以发出不同的请求,如"/help"、"/msg"、"/wois"、"/create"。。。

分配内存时,不会先将其归零(至少在使用malloccalloc时,会先将内存归零)。

要清除C(而不是C++)中的缓冲区,您有几个选项:

  1. 使用calloc而不是malloc来分配缓冲区
  2. 使用Win32的ZeroMemory函数
  3. 使用memset,如下所示:memset( buffer, 0x00, BUFFER_SIZE );

然而,您显然使用的是C++,因此您应该使用标准库和C++习惯用法,而不是C风格的东西,这意味着使用std::string而不是char*,如果您必须直接使用缓冲区,则对数组或缓冲区进行归零(或填充)的C++方式是std::fill

首先,如果可以避免的话,我会避免使用二维数组。也许可以研究std::string:

http://www.cplusplus.com/reference/string/string/

至于为什么一个char数组中可能有"随机垃圾",当你在C++中分配缓冲区时,它总是有数据。如果你想让它为空,你必须手动将数据设置为0。因此,当您第一次分配数组时,最好先将所有值清零。