getchar() 添加额外的字符

getchar() adding extra characters

我正在编写一个程序,我将一些单词输入到 stdin 中,并且有几个不同的函数可以做不同的事情。我将在这里重点介绍第三个功能。用户在一行中输入多个单词,我应该得到最后一个单词。我遇到的问题很奇怪,基本上,每当我输入一个由 8 个字符组成的单词时,程序会正确打印出最后一个单词,但还会在单词末尾添加一个额外的字母 'Genu'。对于 9 个字母的单词,它会添加 'enu' 等等。 12 个或更多字母的单词不存在此问题。此外,这仅发生在 Linux。在 Winows 我收到这条消息:`@.

代码如下:

int main(void)
{
     char* commands[2] = {"search", "exit"};

     char str[100];
     int ch, n = 0;

     while(1)
     {
          while ((ch = getchar()) != '\n')
         {
             str[n] = ch;

             n++;
         }

         char *lastword = str;

         for(int i = 0; i < n; i++)
         {
              if(str[i] == ' ')
              {
                  lastword = strrchr(str, ' ') + 1;
                  break;
              }
         }

        memset(str, 0, 100);
        n = 0;
    }

   return 0;
 }

有人知道问题出在哪里吗?

对我来说,您似乎缺少一个空字节。 str 未正确初始化,这意味着其内容最初未定义。您可以看到您的程序适用于所有进一步的输入,这是因为您 memset 将缓冲区返回到全零。您需要的是在最后一个单词的最后一个字母后面加一个零(即 memset 缓冲区 进入 while 循环之前或像 char str[100] = {0}; 一样初始化它)