我有下一个代码:
std::string line;
std::ifstream myfile ("text.txt");
if (myfile.is_open())
{
while ( myfile.good() )
{
getline (myfile,line);
std::cout << line << std::endl;
}
myfile.close();
}
有没有办法做到这一点,并使用char *代替字符串?
答案 0 :(得分:5)
是的,如果你真的坚持的话。 getline
的{{1}}版本会成为std::istream
的成员:
char buffer[1024];
std::ifstream myfile("text.txt");
while (myfile.getline(buffer, sizeof(buffer))
std::cout << buffer << "\n";
myfile.close();
但是,请注意,大多数C ++程序员最多会认为这是过时的。哦,为了记录,你问题中的循环也不是真的正确。使用字符串,您通常需要以下内容:
std::string line;
std::ifstream myfile("text.txt");
while (std::getline(myfile, line))
std::cout << line << "\n";
myfile.close();
或者,您可以使用my previous answers之一的line
代理,在这种情况下,它会变得更简单:
std::copy(std::istream_iterator<line>(myfile),
std::istream_iterator<line>(),
std::ostream_iterator<std::string>(std::cout, "\n"));
答案 1 :(得分:3)
所以你正在寻找一个更像&#34; C-like&#34;溶液
#include<cstdio>
#define ENOUGH 1000
int main() {
char buffer[ENOUGH];
FILE* f = fopen("text.txt", "r");
while (true) {
if (fgets(buffer, ENOUGH, f) == NULL) break;
puts(buffer);
}
fclose(f);
return 0;
}
...加上一些检查文件是否正确打开。在这种情况下,您在文件fgets()
上使用f
,并阅读char * buffer
。但是,缓冲区仅分配了ENOUGH
空间,此限制也是fgets()
函数的重要参数。当达到ENOUGH - 1
个字符时,它将停止读取该行,因此您应该确保ENOUGH
常量足够大。
但是,如果你并不想在一个类似于C的&#34;中解决这个问题。方式,但仍然会使用<iostream>
,那么您可能只想知道c_str()
std::string
方法返回char*
std::string
的{{1}}表示