关于检查数据是否存在的C ++程序崩溃

时间:2019-03-07 08:39:38

标签: c++ qt fstream

我在这里所做的是将输入名称转换为char,然后从文本文件中检查输入名称char a是否存在或等于现有nameData。 nameData是存储在文本文件中的变量。但是我的程序一旦检测到输入是新的便崩溃了。在这个问题上看起来可能是什么问题?我从其他条件部分得到崩溃。

char *nameData;
    char *passData;
    QByteArray nameBa;
    nameBa = name.toLatin1();
    nameData = nameBa.data();
    passData = pass.data();

    char *a;
    QByteArray aBa;
    aBa = name.toLatin1();
    a = aBa.data();

    std::fstream dataProfile;
    dataProfile.open("D:/Data.txt", std::ios::in);

while(!dataProfile.eof())
    {
        dataProfile.getline(nameData, 90, ' ');
        dataProfile.getline(passData, 90);
        if(std::strcmp(nameData, a)==0)
        {
           std::cout << "Profile Already exists\n";
           //if break here, still crash to else condition
        }
        else
        {
            std::cout << "Not Exists\n";
        }
        break;
    }

2 个答案:

答案 0 :(得分:3)

char *nameData;char *passData;未分配内存。 您需要这样预先分配内存:http://www.cplusplus.com/reference/istream/istream/getline/

char name[256], title[256];

std::cout << "Please, enter your name: ";
std::cin.getline (name,256);

std::cout << "Please, enter your favourite movie: ";
std::cin.getline (title,256);

答案 1 :(得分:1)

我已经知道了,我所做的是:

char nameData[90];
char passData[90];
strcpy(nameData, name.toStdString().c_str()); //name is string
strcpy(passData, pass.data()); //pass is bytearray