关于检查数据是否存在的 C++ 程序崩溃
Program Crash on C++ regarding checking if data exists
我在这里所做的是将我的输入名称转换为 char,然后从文本文件中检查作为输入名称的 char a 是否存在或等于现有的 nameData。 nameData 是存储在文本文件中的变量。但是一旦检测到输入是新的,我的程序就崩溃了。这个问题似乎有什么问题?我从 else 条件部分得到崩溃。
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;
}
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);
我已经想通了,我做的是:
char nameData[90];
char passData[90];
strcpy(nameData, name.toStdString().c_str()); //name is string
strcpy(passData, pass.data()); //pass is bytearray
我在这里所做的是将我的输入名称转换为 char,然后从文本文件中检查作为输入名称的 char a 是否存在或等于现有的 nameData。 nameData 是存储在文本文件中的变量。但是一旦检测到输入是新的,我的程序就崩溃了。这个问题似乎有什么问题?我从 else 条件部分得到崩溃。
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;
}
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);
我已经想通了,我做的是:
char nameData[90];
char passData[90];
strcpy(nameData, name.toStdString().c_str()); //name is string
strcpy(passData, pass.data()); //pass is bytearray