首页 > 解决方案 > getchar() 添加额外字符

问题描述

我正在编写一个程序,在其中输入一些单词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;
 }

有谁知道问题可能是什么?

标签: clinuxgetchar

解决方案


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


推荐阅读