为什么我在这里收到 NZEC 错误
Why do I get NZEC error here?
我的代码在这里-
void input(char* m)
{
char ch;
do
{
ch=getchar();
}
while(ch=='n');
int i=0;
while(ch!='n')
{
m[i++]=ch;
ch=getchar();
}
}
给出 NZEC 错误。但是,如果我使用字符数 len 限制输入,例如 -
void input(char* m, int len)
{
char ch;
do
{
ch=getchar();
}
while(ch=='n');
int i=0;
while(ch!='n'&&i<len-1)
{
m[i++]=ch;
ch=getchar();
}
}
它通过得很好。为什么?
在第一种情况下,您有一个缓冲区溢出!
您的while(ch!='n')
将循环直到"",无论键入的字符数如何。如果键入的字符数多于 m
指向的字符缓冲区中的空间,则可能会损坏内存。 当然,在第二种情况下,len
会避免这种情况。
请注意,在这两种情况下,您都无法确保缓冲区的空终止符。 因此,如果您将m
处理为 c 字符串,您可能还没有足够的内存或溢出,因为字符串可能非常长。
你有没有考虑过将你的函数定义为:
void input(std::string& m) {
// ...
m.push_back(ch); // instead of m[i++]=ch
// ...
}
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 为什么我在这里收到 NZEC 错误