C++ 逐行读取文本文件,使用char*而不是字符串c++;

C++ 逐行读取文本文件,使用char*而不是字符串c++;,c++,C++,我有下一个代码: 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(); } std::字符串行; s

我有下一个代码:

  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();
  }
std::字符串行;
std::ifstream myfile(“text.txt”);
如果(myfile.is_open())
{
while(myfile.good())
{
getline(myfile,line);

std::cout是的,如果你真的坚持的话。有一个版本的
getline
std::istream
的成员,它可以:

char buffer[1024];

std::ifstream myfile("text.txt");

while (myfile.getline(buffer, sizeof(buffer))
    std::cout << buffer << "\n";
myfile.close();

是的,如果你真的坚持的话。有一个版本的
getline
std::istream
的一个成员,它可以:

char buffer[1024];

std::ifstream myfile("text.txt");

while (myfile.getline(buffer, sizeof(buffer))
    std::cout << buffer << "\n";
myfile.close();

那么你是在寻找一个更像“C”的解决方案

#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;
}
#包括
#定义足够的1000
int main(){
字符缓冲区[足够];
文件*f=fopen(“text.txt”,“r”);
while(true){
如果(fgets(缓冲区,足够,f)==NULL)中断;
放置(缓冲);
}
fclose(f);
返回0;
}
…再加上一些检查文件是否正确打开。在这种情况下,您对文件
f
使用
fgets()
,读取字符*
缓冲区
。但是,缓冲区只分配了
足够的
空间,此限制也是
fgets()的一个重要参数
函数。当到达
足够多的-1个
字符时,它将停止读取该行,因此您应该确保
足够多的
常量足够大


但是,如果您不是想用“C-like”的方式解决这个问题,而是仍然要使用
,那么您可能只想知道
std::string
C_str()
方法返回该
std::string
char*
表示,所以您正在寻找一个更“C-like”的解决方案

#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;
}
#包括
#定义足够的1000
int main(){
字符缓冲区[足够];
文件*f=fopen(“text.txt”,“r”);
while(true){
如果(fgets(缓冲区,足够,f)==NULL)中断;
放置(缓冲);
}
fclose(f);
返回0;
}
…再加上一些检查文件是否正确打开。在这种情况下,您对文件
f
使用
fgets()
,读取字符*
缓冲区
。但是,缓冲区只分配了
足够的
空间,此限制也是
fgets()的一个重要参数
函数。当到达
足够多的-1个
字符时,它将停止读取该行,因此您应该确保
足够多的
常量足够大


但是如果你不是想用一种“C-like”的方式来解决这个问题,但是仍然要使用
,那么你可能只是想知道
C_str()
std::string的
method
返回该
std::string的
char*
表示形式

您为什么要用
char*
执行此操作?所以您想逐字符读取文本文件?不明白您的意思。是的,有一种简单的方法:
line.c_str()
@Mat-我想在我的代码中使用与字符串类型不匹配的函数我有妻子和孩子,有一份好工作,还有一辆奔驰。有没有办法在失业、离婚和街头过同样的生活?你为什么要用
char*
这样做?所以你想逐字符阅读文本文件?没有你的点..是的,有一个简单的方法:
line.c_str()
@Mat-我想在我的代码中使用的函数与字符串类型不匹配。我有妻子和孩子,一份很棒的工作和一辆奔驰。有没有办法过失业、离婚和流落街头的生活?