如何从文本文件中读取特定数量的字符

Posted

技术标签:

【中文标题】如何从文本文件中读取特定数量的字符【英文标题】:How to read a specific amount of characters from a text file 【发布时间】:2012-03-20 02:12:49 【问题描述】:

我试着这样做

 #include <iostream>
 #include <fstream>

using namespace std;

int main()

    char b[2];
    ifstream f("prad.txt");
    f>>b ;
    cout <<b;
    return 0;

它应该读取 2 个字符,但它读取整行。这适用于另一种语言,但由于某种原因在 C++ 中不起作用。

【问题讨论】:

+1 和“谢谢”提供了一个简短而完整的示例程序。 sscce.org “这适用于另一种语言,但由于某种原因在 C++ 中不起作用。”这是您在编程中可以做出的最糟糕的假设之一。它们是两种不同的语言,因此它们可以有不同的行为。 是的,这样想是很危险的。如果您是从 Java 转向 C++(这就是您的错误的样子),您确实需要坐下来阅读指针和数组的一些内容,并确保在您自责之前了解正在发生的事情。 【参考方案1】:

您可以使用read() 指定要读取的字符数:

char b[3] = "";
ifstream f("prad.txt");

f.read(b, sizeof(b) - 1); // Read one less that sizeof(b) to ensure null
cout << b;                // terminated for use with cout.

【讨论】:

为了使32 之间的关系更加明显,我建议使用命名常量。 size_t const BufferSize = 2;char b[BufferSize+1] = "";f.read(b, BufferSize); @MatthieuM.,我通常会使用sizeof(b) - 1(如果可能的话)。代码已更新。 我总是不愿意推荐这个,因为如果 b 是一个指针,编译仍然可以通过你在 64 位平台上得到一个固定的 7。不过,您可以对数组使用 size 函数,使用模板很容易。 @MatthieuM。好点子。已经看到使用模板的解决方案(在这个网站上很多次),但这里的目的是表明空终止的要求。【参考方案2】:

这适用于另一种语言,但在某些情况下不适用于 C++ 原因。

有些事情会因语言而异。特别是,在这种情况下,您遇到了这样一个事实,即在 C++ 中指针和数组几乎没有什么不同。该数组作为指向 char 的指针传递给 operator>>,该指针被解释为字符串指针,因此它执行对 char 缓冲区所做的操作(即读取直到宽度限制或行尾,以先到者为准)。发生这种情况时,您的程序应该崩溃,因为您的缓冲区溢出。

【讨论】:

【参考方案3】:
istream& get (char* s, streamsize n );

从流中提取字符并将它们作为 c 字符串存储到 从 s 开始的数组。字符被提取直到 (n - 1) 字符已被提取或分隔符 '\n' 是 成立。如果到达文件末尾,提取也会停止 输入序列或在输入操作过程中发生错误。如果 找到分隔符,它不是从输入中提取的 序列并保留为要提取的下一个字符。采用 getline 如果您希望提取(并丢弃)此字符。 表示 c 字符串结束的结束空字符是 自动附加在存储在 s 中的内容的末尾。

【讨论】:

以上是关于如何从文本文件中读取特定数量的字符的主要内容,如果未能解决你的问题,请参考以下文章

Python如何删除文本文件中特定字符串之后或之前的特定行数

文本文件常用编码

从文本文件中读取和写入字符串

如何从python中的图像中删除某些文本?

从文本文件中读取直到字符串最大长度

如何在该行某处某处的某一行中的特定字符串之后从文本文件中获取一个数字?