尽管我已经实现了打印字符串和从键盘获取字符的功能,但我正在为nanokernel编写一些代码,这意味着我无法使用标准库。
现在,我已经设置了程序来从键盘上提取字符并将它们放入数组中。然后将字符串打印出来。我希望打印出的字符串看起来与用户输入的内容完全一样。
问题在于,似乎唯一输入到字符串中的char是键盘上输入的第一个char。
以下是将字符放入数组的相关代码:
void stringin(char str[]) { // takes a string, puts it in str
int i = 0;
for (i = 0; str[i] != '\n' && str[i] != '\033';) {
str[i] = getch();
if (str[i] != '\n' && str[i] != '\033') {
i++;
}
calctime(1000000); // waits for a bit so that we don't flood the array
}
if (str[i] == '\n') newline(1);
str[i++] = '\0';
}
我已经使用了打印功能和strcmp()实现来测试字符串的内容,因此打印字符串似乎没有什么问题。
答案 0 :(得分:2)
基于注释,将str
传递到stringin
,而缓冲区未初始化。
由于下面的循环基于str[i]
的初始化之前基于str[i]
的值而终止,因此结果是不确定的。
for (i = 0; str[i] != '\n' && str[i] != '\033';) {
str[i] = getch();
....