是否有任何问题直接读入std :: string?

时间:2016-09-07 15:54:40

标签: c++ string

我在代码中看到了对std::string的直接读取,其中内容旨在被解释为字符串,如下所示:

std::string note;
note.resize(n);
read( &note[0], n );

假设n具有固定大小,如在解析方案中。

直接读取字符串是否有任何问题?我已经看到ifstreams有很多用途,但在这种情况下看起来似乎过分了。

2 个答案:

答案 0 :(得分:2)

首先,如果它是由多行创建的文本文件,我发现std::string类不是一个好的选择作为&#34;容器&#34 ;;我只想要一个std::vector<char>,或者如果你想做一些额外的解析并将文件分成单行,std::vector<std::string>

我还要注意文件使用的编码:它是UTF-8吗?是基于char的其他编码吗?

例如,如果文件是UTF-16,将其作为原始字节序列读入std::string将会产生误导(并且容易出错)。

此外,注意文件的大小也很重要。如果您有一个巨大的文本文件(例如5GB)并且您正在构建一个32位Windows应用程序,那么您的代码将无法正常工作(因为Windows上的32位进程默认限制为2GB)。在这种情况下,以较小的块读取文件内容(或使用内存映射文件技术,文件中使用较小的&#34; views&#34; )可能是更好的选择。

答案 1 :(得分:1)

这样看:“可能发生的最糟糕的事情是什么?”

您是从本地用户那里获取文件的吗?如果他们提供的文件太大,也许他们的机器会崩溃,甚至因内存不足错误而导致你的程序被杀?

您是否希望用户经常这样做以担心?

可替换地:

您是从网络源还是不受信任的用户获取文件?是否会让该用户有可能破坏您的系统或终止您的应用程序构成风险?