c - 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;
}
有谁知道问题可能是什么?
解决方案
对我来说,您似乎缺少一个空字节。str
没有正确初始化,这意味着它的内容最初是未定义的。您可以看到您的程序适用于所有进一步的输入,这是因为您memset
将缓冲区全部归零。您需要的是最后一个单词的最后一个字母后面的零(即进入while循环之前memset
的缓冲区或初始化它)char str[100] = {0};
推荐阅读
- css - 我的导航栏下拉链接不起作用
- reactjs - Formik FieldArray - 动态生成名称
- c++ - 区块链 Hyperledger 私钥错误
- python - 合并几个具有特定约束的 pandas.DataFrames
- jquery - Node.js 无法读取未定义的属性“项目”
- python - 仅在模式(“_”)之前保留部分 'id' 字符串
- kotlin - 具有泛型和实现接口的 Kotlin 类
- api - Z3 OCaml API 递归函数
- scala - 为什么 WritableConverter 是私有的?
- javascript - 测试类方法中的静态方法调用时出现 TypeError