相关文章推荐
谈吐大方的斑马  ·  手把手教学!TensorRT部署实战:YOL ...·  1 年前    · 
有胆有识的槟榔  ·  java - JavaScript ...·  1 年前    · 
时尚的牛肉面  ·  sys.syscommittab ...·  1 年前    · 
高大的手术刀  ·  机器学习都能自动化了?自动之自动 = ...·  1 年前    · 
仗义的凉茶  ·  谈谈在Java中如何优雅地判空 ...·  1 年前    · 
Code  ›  程序在试图访问文件fstream时崩溃--C++开发者社区
fstream
https://cloud.tencent.com/developer/ask/sof/109714144
暗恋学妹的火柴
1 年前
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
提问
问 程序在试图访问文件fstream时崩溃--C++
Stack Overflow用户
提问于 2013-02-10 03:33:30
EN

我正在制作一个用户数据库。当我试图打开保存所有用户和密码的 "dataBase.txt" 时,控制台会弹出(这应该会发生,因为它是控制台应用程序),但是它说程序已经完成了。当我关闭它时,我的电脑告诉我程序已经崩溃了。函数保存在类中。

经过一些调试,代码似乎在 ifstream fin("dataBase.txt"); 崩溃了

编译器不返回错误.

函数的代码是:

void User_Psw::UserCheck()
    // read from the database
    ifstream fin("dataBase.txt");
    while (!fin.eof())
        fin >> Usernames[sizeOfDatabase] >> Password[sizeOfDatabase];
        sizeOfDatabase++; //The Number of lines in .txt
    // rest of the program
    cout << "Username: ";
    cin >> username;
    getNameIndex();
    cout << "Password: ";
    cin >> password;
    if(!PasswordMatches())
        cout << "Access denied";
}

如果需要的话,我可以添加更多的代码片段。 。

2 2.8K 0 票数 0
EN
c++
fstream
crash-reports

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-10 03:50:39

控制回路 。该函数只有在读取失败后才有用。

不过,造成崩溃的一个可能原因是,您要分配给 Usernames[sizeOfDatabase] ,这可能超出了 Usernames.capacity() 。将项和项附加到 std::向量 的规范方法是调用 push_back() 。

因为您的容器是 std::vector<std::string> ,这是一个更好的方法.

std::string username, password;
while (fin >> username >> password)
    Usernames.push_back(username);
    Passwords.push_back(password);
    ++sizeOfDatabase;
}

当然,如果您想知道文件读取后用户名或密码的数量,可以调用 Usernames.size() (这应该与 Passwords.size() 相同);这可能不需要保留 sizeOfDatabase 。

就我个人而言,对于用户名和 (咸的,散列的)密码 ,我会使用一个容器,而不是两个单独的容器;或者是 std::map ,或者是 std::unordered_map ,使得每个用户名都能快速查找密码。

票数 1
EN

Stack Overflow用户

发布于 2013-02-10 03:40:01

我认为您应该首先将它添加到 ifstream 的构造函数中,因为您还没有指定要打开该文件以供输入:

ifstream fin( "dataBase.txt",  ifstream::in );
 
推荐文章
谈吐大方的斑马  ·  手把手教学!TensorRT部署实战:YOLOv5的ONNX模型部署-阿里云开发者社区
1 年前
有胆有识的槟榔  ·  java - JavaScript eval in JavaApplication: "javax.script.scriptException: Expected operand but found
1 年前
时尚的牛肉面  ·  sys.syscommittab 表中的重复键 - SQL Server | Microsoft Learn
1 年前
高大的手术刀  ·  机器学习都能自动化了?自动之自动 = 自动的乘方?-自动化机器
1 年前
仗义的凉茶  ·  谈谈在Java中如何优雅地判空 !-java优雅的判空
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号