getline超过指定的数量
getline going over specified amount
本文关键字:getline 更新时间:2023-10-16
我有这个代码。。。。
file_parser::file_parser(string file){
txtfile.open(file.c_str(), ios::in);
if (!txtfile.good()){
string error=err(0," "+file+" not found. Exit code ",1);
throw file_parse_exception(error);
}
while (!txtfile.eof()){
char str[200];
txtfile.getline(str, 200);
string str2=str;
vfile.push_back(str2);
}
txtfile.close();
}
问题是,如果我在输入文件中有一行超过200个字符,它就会挂起,然后崩溃。我在崩溃时检查了str的值,它前面有一个null char,然后它试图将一个null(未初始化)字符串推回到导致挂起/崩溃的向量上。有人知道绕过这个的办法吗?我认为使用getline会将char数组截断为199(+null)个字符,但显然没有发生这种情况。我被难住了。问题是,我希望每个推回最多有200个字符。我真的不想要整行,这就是"字符串str"的作用。如果一行超过200个字符,它应该读取前200个,然后转到下一行。
用以下内容替换输入循环:
std::string str;
while (std::getline(txtfile, str)){
vfile.push_back(str);
}
使用ios::eof()
作为循环条件几乎总是会创建一个有缺陷的程序,就像这里所做的那样。在这种情况下,使用eof()
有两个问题。首先,eof()
仅在读取失败之后设置,而不是在读取之前设置,但您在读取之前对其进行检查。其次,eof()
不检查其他错误的范围。当输入行的字符数超过200个时,istream::getline
会设置failbit
,但不会设置eofbit
。
编辑:增加了将输入行限制为200个字符的要求,这应该可以工作:
// untested
std::string str;
while(std::getline(txtfile, str)) {
if(str.size() > 200)
str.erase(200, std::string::npos);
vfile.push_back(str);
}
相关文章:
- Seg Fault Issue C++ (file IO / getline)
- 当用户键入分隔符时,停止getline()输入
- getline() 的原型/库是什么;
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 如何在 c++ 中使用 ',' 作为 getline 分隔符
- 错误:调用'getline'没有匹配函数
- 如何在 c++ 中使用 getline 从文件中读取字符串?
- 将 getline() 与文件一起使用
- 我有三个 getline,但是一旦编译,输入就太多了
- 在 std::getline 和 std::cin 期间卡在循环中
- 为什么 getline() 不读取文本文件中的所有内容?
- 有没有办法在不使用 getline() 的情况下从.csv文件中读取?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- std::getline没有在while循环中重新请求用户输入
- 谁能告诉我我用 getline 做错了什么 (cpp) 格式
- Getline(cin,str)的奇怪输出
- 我在C++中使用 getline() 函数时遇到问题
- 而循环跳过 cin.getline() 对于 C 字符串
- 如何在 getline 中删除/忽略超过特定数字的字符?
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)