我尝试这样做:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
char b[2];
ifstream f("prad.txt");
f >> b;
cout << b;
return 0;
}
它应该读取 2 个字符,但它读取整行。这适用于另一种语言,但由于某种原因不适用于 C++。
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.
这适用于另一种语言,但不适用于某些 C++ 原因。
有些事情会因语言而异。特别是,在这种情况下,您遇到了这样一个事实:在 C++ 中,指针和数组几乎没有什么不同。该数组作为指向 char 的指针传递给运算符>>,该指针被解释为字符串指针,因此它执行与 char 缓冲区相同的操作(即读取直到宽度限制或行尾,以先到者为准)。当这种情况发生时,你的程序应该会崩溃,因为你的缓冲区溢出了。
istream& get (char* s, streamsize n );
从流中提取字符并将它们作为 c 字符串存储到 从 s 开始的数组。字符被提取直到 (n - 1) 已提取字符或分隔符 ' ' 是 成立。如果到达文件末尾,提取也会停止 输入顺序或输入操作期间发生错误。如果 找到了分隔字符,但未从输入中提取它 序列并保留为下一个要提取的字符。使用 getline 如果您希望提取(并丢弃)该字符。 表示 c 字符串结束的结束空字符是 自动附加在 s 中存储的内容的末尾。