警告 C4700:使用未初始化的局部变量"p"

warning C4700: uninitialized local variable 'p' used

本文关键字:局部变量 初始化 C4700 警告      更新时间:2023-10-16

这段代码编译并运行时出现了一个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来存储字符串值。