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};
一样初始化它)
我正在编写一个程序,我将一些单词输入到 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};
一样初始化它)