C使用ifstream读取文件

新手上路,请多包涵

我对在 C++ 中使用 std::ifstream 有一些疑问。

大多数是我找不到答案的一般问题,因此对其他人也可能有用。

无论如何,我使用 #include <fstream> 并创建了一个变量 char line[20]

有一个文本文件包含多行模式 jxxx (其中 x 是数字),如下所示:

j1234
j5678
j1111
(等等)

所以,我这样做:

 #include <iostream>
#include <fstream>

char line[20]
ifstream rfile;
rfile.open("path-to-txt-file");
while (!rfile.eof()) {
    rfile.getline(line, 20); (why is 20 needed here?)
    cout >> data >> endl;
    }
rfile.close();

所以担心的是:

  1. 为什么 getline 方法中需要数字?

  2. line 是否自动在末尾有 \0 ? because when we create char vars like char text[5]; text = "abc1" , it is actually saved as "acd1\0" and what happens to the endlines in the file ( \n ) 在每个 jxxx 行之后? (我想在比这更复杂的代码中使用这些行,所以想知道)

  3. 程序会自动移动到下一行吗?如果没有,我如何告诉它转到下一行?

原文由 Atem 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 599
1 个回答
  1. getline() 函数将指向 char 的指针作为参数,它无法知道数组有多大,这就是为什么你必须自己传递数字,否则它可能会尝试将字符读入数组“外部”的内存中.

请参阅 将数组传递给 C++ 中的函数

  1. 默认情况下,char 数组不是以 null 结尾的,它们必须明确地完成(就像 getline() 在这里做的那样),但只有当你想将你的 char 数组用作字符串时才需要它。这样,您可以编写一些以 char* 作为参数的函数,而无需额外的数组大小,当您遇到 0 时,您将知道字符串的结尾在哪里,即使调用者没有像传递它的大小一样你会在你的代码中使用 getline() 。这几乎是 c 风格字符串背后的想法。

原文由 Murzinio 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题