警告 C4700:使用未初始化的局部变量"p"
warning C4700: uninitialized local variable 'p' used
这段代码编译并运行时出现了一个Microsoft编译器错误,我无法修复
警告C4700:使用了未初始化的局部变量"。
这是在代码的起始行,我认为
void employee::loginemployee()
{
char uname[15];
char pass[15];
char p;
int i=0;
cout<<"nttEnter User Name :-";
cin>>uname;
puts("nttEnter Password :-");
while(p!=13)
{
p=_getch();
_putch('*');
pass[i]=p;
i++;
}
pass[i]=' ';
ifstream objdata;
objdata.open("HRStaff",ios::in|ios::out|ios::binary|ios::app);
if(!objdata)
{
cout<<"n-----Cannot Open the File-----n";
//return 1;
}
int nflag=0;
while(!objdata.eof())
{
objdata.read((char *)& info, sizeof(info));
if(strcmp(uname,info.uname)==0 )
{
system("cls");
cout<<"nnntt****************************************";
cout<<"ttttttt Welcome TO EMS"<<info.uname<<endl;
cout<<"tt****************************************n"<<endl;
info.putdata("SPS");
cout<<"ntPress any key to log out...";
nflag=1;
}
}
if(nflag==0)
{
cout<<"nnSorry !! Your Username & Password do not match.";
_getch();
logoutAll();
}
objdata.close();}
警告非常清楚。您声明一个变量而不初始化它:
char p;
然后使用其未初始化的值:
while(p!=13)
{
// ...
}
在使用前进行初始化:
char p = 0; // or any value other than 13
或者重组逻辑,使其值在您分配给它之前不会被使用:
do
{
// ...
} while (p != 13);
然后了解缓冲区溢出,并在不检查长度的情况下停止将用户输入读取到固定大小的缓冲区中。这是C++,而不是C,所以通常应该使用std::string
来存储字符串值。
相关文章:
- 为什么C++有不同的变量初始化方式?
- 静态 constexpr 成员变量初始化
- C++不同的变量初始化
- 全局和局部变量初始化与 constexpr 的差异背后的基本原理
- 是变量初始化失败吗?
- 视觉C++:在 DLL 加载期间,全局变量初始化顺序是否具有确定性?
- 类静态变量初始化顺序
- 使用 constinit 变量初始化 constexpr 变量
- 是否可以在不修改父类的情况下将成员变量初始化推迟到继承的类?
- 如何将局部变量初始化为C++的未知值
- 使用全局变量初始化不同编译单元中的其他全局变量
- 使用默认构造函数引用成员变量初始化错误
- 宏的 if 语句中的变量初始化
- 不稳定的C :每行适应性变化多变量初始化
- DLL 中的 C++ 静态局部变量初始化会导致_CrtIsValidHeapPointer异常
- C++-局部未初始化变量的值
- 在VS2015中c++局部静态变量初始化线程安全吗?
- 多线程环境中的静态局部变量初始化
- 局部静态变量初始化是线程安全的
- C++11 中线程安全局部静态变量初始化的成本