标准文本文件是否以NULL结尾?

5
我正在编写一个C++程序,该程序读取文件并将其作为字符数组发送给另一个类。由于字符数组只能通过指针传递,因此所有的大小信息都被丢失了。
将要读取的文件将是一个文本文件。文本文件是否以空字符结尾?
最好不要使用向量,因为我确实不需要它的任何功能,只需要数组的大小。

1
不,文本文件不是以 NULL 结尾的。你可以通过读取文件的函数/方法在缓冲区中追加,或者维护另一个变量来保存长度。 - VoidPointer
@VoidPointer 长度参数就是它。 - Jeroen
相关:https://latedev.wordpress.com/2012/12/04/all-about-eof/ - user395760
1
回复:“我不需要它的任何功能,只需要数组的大小”:那就不要使用它的任何功能,只使用数组的大小。我的车在高速公路上可以行驶70英里每小时,但这并不意味着我不能用它去杂货店。哦,而且你会发现std::vector在后台执行的内存管理将为你节省很多麻烦。 - Pete Becker
@PeteBecker 我这么做是因为我想学习这些东西,所以选择捷径可能并不那么有用。 - Jeroen
4个回答

8

文件有已知的长度,因此它们不需要任何终止字节。


谢谢您的回答。我想我只需要发送一个整数来指定数组的长度。 - Jeroen

4

文本文件没有NULL终止符。你需要检查EOF(文件结束)。

我认为可以这样理解。

cin.eof()

这是您正在查找的内容。如果已到达文件结尾,它将返回true。


但是不要在循环条件中这样做。只有在读取操作由于EOF而失败时,才会设置eof标志,因此如果您在循环条件中检查eof,那么您将多循环一次。 - Some programmer dude

1
不,它们并非如此。但许多用于从文件读取字符串的C/C++函数会将零终止符附加到返回的数据中。

-1

使用 eof 而不是查找空字符... 例如:

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream iFile("myfile.txt");   // myfile.txt has integers, one per line
while (!iFile.eof())
{
int x;
iFile >> x;
cerr << x << endl;
}
return 0;
}

1
不要在循环条件中使用eof()。 - Sebastian Redl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接