在阵列中没有覆盖元素
Not overwriting elements in arrays
我正在编写我们应该在我正在学习的计算机科学课程中,学习C 的程序的代码。在此程序中,我试图让用户输入他们可能喜欢的爆米花口味,但没有超过10(或9个字符)。当我尝试包括具有> 10个字符的口味时,该程序不会导致错误或正常工作,而只会将超过10个字符存储在数组中的下一个元素中。我如何阻止程序这样做?
#define POP_COUNT 5
#define POP_SIZE 10
int main() {
char popcorn[POP_COUNT][POP_SIZE];
fputs("Enter your 5 favourite popcorn flavours: n", stdout);
for (int i = 0; i < POP_COUNT; i++) {
fgets(popcorn[i], POP_SIZE, stdin);
popcorn[i][POP_SIZE - 1] = 0;
}
cout << popcorn[0] << endl;
cout << popcorn[1] << endl;
fputs("Your favourite flavours are: n", stdout);
for (int i = 0; i < POP_COUNT; i++) {
fputs(popcorn[i], stdout);
}
}
您的问题来自fgets()
的正常行为。它不会比您指定的大小可以容纳的尺寸的缓冲区读取更多的字符,包括终结器的空间。无论它在给定的电话上没有阅读的内容是否仍在流中等待,并将在下一个呼叫上阅读。
要解决这个问题,您必须首先检测。您可以通过检查是否存储在目标缓冲区中的新线来做到这一点。如果是这样,那么您就很好,但是如果不是,那么只有一条部分。请注意,您也无需手动插入终结器 - fgets()
将始终包含成功的终结器。
如果您只想丢弃任何额外的字符,那么在第二种情况下,您必须做到这一点 - 读取并忽略其他字符,直到您读取了newline或到达文件的末尾。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 当将多个TypedArrayContents数组加载到V8数组中时(数组数组)时,最后一个元素将覆盖所有元素
- 覆盖数组元素时如何调用构造函数
- 在阵列中没有覆盖元素
- c ++ 我的 char* 数组被最后一个添加的元素覆盖
- 使用 char **,其中新元素覆盖以前的元素
- 尝试在文本文件中添加结构元素而不覆盖它
- 如何覆盖其他窗口应用程序的元素?
- 在 stl 映射中插入新项目时,将覆盖到第一个元素
- vector元素被覆盖
- 映射写入失败:无法覆盖第一个元素
- 字符串拆分为矢量<字符*>覆盖矢量元素
- 一旦满足指定容量,覆盖优先级队列末尾的元素