扬声器1:现在,让我们解决 这最后一个程序。 而这一次,让我们明确地分配 一些存储在其中 用户的输入将被存储。 要做到这一点,让我们磨练,首先 在哪里,我们宣布S码线 以前是一个char明星。 这一次,让我们重新申报 它如下 - char中支架16,例如, 接近支架。 换句话说,让我们来宣告s到无 再一个字符的地址, 但16个字符,而数组。 通过这种方式,用户可以输入最多15个 字符,仍然留有余地 一个空终止。 让我们继续保存,编译, 并运行此程序。 让scanf2点斜线scanf2。 现在,让我们输入一个字符串像招呼, 并且我们感谢为你好。 现在,仍然有问题。 我只输入了招呼,这是唯一 五个大字,加1为空 终结者。 它留给我们的只有 需要6个字节。 但不幸的是,我们只 共分配16。 因此,如果用户实际上类型16 字符,或17,或几百 字符,我们仍然不会 有足够的空间在内存中 用户的输入。 而事实上,这是什么使 获取用户输入,因此 难度一般。 事实上,这就是为什么我们实施 在第一个的get字符串函数 发生在CS50库 - 弄清楚如何处理这些 情况下,在用户类型 比我们更多的字符 最初的预期。 坦率地说,不完全 重写这个程序, 有没有干净的解决方案。 相反,我们所要做的就是让 来自用户1的一个字符 时间,一遍又一遍。 并在每个点上,如果我们意识到我们 记忆体不足,我们将不得不在 这一点回去和重新分配 一些更多的内存,复制用户的 从我们的第一个块前一个输入 内存入新, 较大块的内存。 然后重复这个过程, 再次,直到用户完成提供 他或她的输入。