这是原始问题。 #包括 #包括 #包括 #包括 #包括 #include
using namespace std;
int main()
{
ofstream f ("teste.txt");
size_t len= 100; // valor arbitrário
char *line;
std::list<string> mylist;
if (!f)
{
perror("teste.txt");
exit(1);
}
while (getline(&line, &len, f) > 0)
{
for (std::list<string>::iterator it = mylist.begin(); it != mylist.end(); it++){
*it->assign(line,line+strlen(line));
cout << *it << '\n';
}
//printf("%s", line);
}
fclose(f);
return 0;
}
非常感谢修复版。
尊重,
UAGA
答案 0 :(得分:1)
您无法使用'='运算符为char*
分配std::string
值。
更改
*it=line
到
it->assign(line,line+strlen(line);
答案 1 :(得分:1)
按如下方式更改while循环:
while (getline(&line, &len, f) > 0)
{
mylist.push_back(line);
cout << mylist.back() << '\n';
}
您无法从std::list<>
访问任何未初始化的项目。
同样注意您应该line
std::string
,并省略代码中的malloc()
/ free()
来电。
第二次注意:使用std::ifstream
代替FILE*
作为输入文件流。
这是完全修复的(ideone)代码示例中没有错误/例外:
#include <iostream>
#include <fstream>
#include <string>
#include <list>
#include <exception>
#include <errno.h>
#include <stdlib.h>
int main()
{
try
{
std::ifstream f("teste.txt");
if(!f)
{
std::cerr << "ERROR: Cannot open 'teste.txt'!" << std::endl;
exit(1);
}
std::string line;
std::list<std::string> mylist;
while (std::getline(f,line))
{
mylist.push_back(line);
std::cout << mylist.back() << std::endl;
}
}
catch(const std::exception& ex)
{
std::cerr << "Exception: '" << ex.what() << "'!" << std::endl;
exit(1);
}
exit(0);
}