我在代码中看到了对std::string
的直接读取,其中内容旨在被解释为字符串,如下所示:
std::string note;
note.resize(n);
read( ¬e[0], n );
假设n具有固定大小,如在解析方案中。
直接读取字符串是否有任何问题?我已经看到ifstreams有很多用途,但在这种情况下看起来似乎过分了。
答案 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)
这样看:“可能发生的最糟糕的事情是什么?”
您是从本地用户那里获取文件的吗?如果他们提供的文件太大,也许他们的机器会崩溃,甚至因内存不足错误而导致你的程序被杀?
您是否希望用户经常这样做以担心?
可替换地:
您是从网络源还是不受信任的用户获取文件?是否会让该用户有可能破坏您的系统或终止您的应用程序构成风险?