数组

时间:2019-05-11 02:06:01

标签: c arrays string

尽管我已经实现了打印字符串和从键盘获取字符的功能,但我正在为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()实现来测试字符串的内容,因此打印字符串似乎没有什么问题。

1 个答案:

答案 0 :(得分:2)

基于注释,将str传递到stringin,而缓冲区未初始化。

由于下面的循环基于str[i]的初始化之前基于str[i]的值而终止,因此结果是不确定的。

for (i = 0; str[i] != '\n' && str[i] != '\033';) {
    str[i] = getch();
    ....