- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
最近我偶然发现了一个帖子:How to read an entire file into memory in C++其中描述了读取文件的不同技术。每种方法都对其效率或与未定义行为 相关的风险进行了评论。在列表中给出了以下示例:
// Bad code; undefined behaviour
in.seekg(0, std::ios_base::end);
基本上以这种或类似的形式经常用于实际读取文件大小。简而言之,帖子中提出的推理是,在 C 标准 (N1570) §7.21.3
中声明:
Setting the file position indicator to end-of-file, as with fseek(file, 0, SEEK_END), has undefined behavior for a binary stream (because of possible trailing null characters) or for any stream with state-dependent encoding that does not assuredly end in the initial shift state.
脚注 268
用于:
A file need not begin nor end in the initial shift state
为了确认 C++11 的上述内容,还有对 C++ 标准草案 (N3242) 27.9.1.1
的额外引用,其中指出:
The restrictions on reading and writing a sequence controlled by an object of class basic_filebuf are the same as for reading and writing with the Standard C library FILEs.
其中 basic_filebuf
根据 cppreference是 basic_ifstream
(内部缓冲区)实现的一部分。 ifstream
实现也应该承担所指示的行为。
根据我从描述中了解到的内容和我设法挖掘的内容,这个问题主要与可能不会以 initial shift state
结束的宽向流有关。
在我看来,由于文件大小计算的流行用法,这不是典型案例。这个话题对我来说仍然不是很清楚。因此,以下问题:
初始状态转换
实际上是什么?我认为它与数据集群无关。更多关于多字节 char 编码,但这样问题不会仅限于非二进制流吗?wide-
和narrow-oriented
流?我知道:“A newly opened stream has no orientation.”
方向是在对流的第一次 I/O 调用时决定的。但实际上,比方说,是否有任何默认值取决于流类型、系统、区域设置或其他因素?最佳答案
"shift state" - 仅限于多字节文本流(和 EOL 处理 \r\n
与 \n
)并且这个问题将仅限于文本流。
但这不是唯一的问题。从您引用的文章中,我强调:
Some platforms store files as fixed-size records. If the file is shorter than the record size, the rest of the block is padded. When you seek to the “end”, for efficiency’s sake it just jumps you right to the end of the last block… possibly long after the actual end of the data, after a bunch of padding.
fseek(p_file, 0, SEEK_END)
其次是 ftell(...)
只要 EOF
就提供有效答案旗帜没有升起。
阅读引用的“解决方案(真正的大文件)”部分,因为它提供了详细信息,特别是:
第 4 步。“使用 seekg()
将流恢复到起始位置。这也将清除 EOF 标志。"
评论中的问题:
do you have the knowledge which platforms particularly?
Google 将我带到了 this list面向记录的文件系统 - 主要是大型机,其中一些仍在使用。
另一个可能是“记录文件”区域的区域:“云端”。你永远不知道什么时候有人会(重新)化身Distributed Data Management Architecture并解决了 record-oriented files 可以解决的问题.据我所知(几乎什么都没有),NFS 可能 已经在这样做了:RFC谈到“记录锁定”。
最重要的是,在用 C/C++ 编写“真正标准的跨平台兼容软件”时,我会关注标准并尊重这个问题。
关于c++ - 读取文件和未定义的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41214250/
注意:根据 ECMAScript5.1, section 15.1.1.3 , window.undefined 是只读的。 现代浏览器正确地实现了这一点。例如:Safari 5.1、Firefox
我用谷歌搜索,检查了所有常见的响应。这些脚本似乎顺序正确(它们在 the demo 中以相同的顺序工作)但由于某种原因,当我尝试实现它时,我得到了错误。 我有一个 paste bin用我完整的页面代码
我有以下代码: simpleExample.html: Simple example Open the Console. js/simpleExampleJS.
所以我对 typescript 很陌生。 这是我的 tsconfig.json 文件的样子, 我什至不知道那些“例子”是从哪里来的 这是我在浏览器中遇到的错误 这是我的 package.json 最佳
我被 TypeScript 错误困住了: Failed to compile. undefined TypeScript error in undefined(undefined,undefined)
我已将 onlcick 事件附加到表单的提交按钮以覆盖默认的 POST 请求,但在使其正常工作时遇到了一些问题。 我想要的是点击添加到购物车的商品,但只显示模式确认而不刷新页面。 这段代码在我的静态示
我已经完成了这个link .但是给定的解决方案并没有解决我的问题。所有经验丰富的人都建议使用 getActivty().getApplicationContext()。但我使用的是普通类(class)
我有一个应用程序,其中 webpack 配置为模块 bundler ,babel 作为我的 js 编译器。全部都在 Node 引擎上。我设置当我运行 npm run dev 时,将会发生以下流程: w
我正在尝试在浏览器中呈现网址的 JSON 数据,但它在 div 中显示为 undefined, undefined .当我将其响应放入console.log时对象及其数据出现,因此它出现在控制台和浏览
为什么我会收到 Cannot invoke an object which is possibly 'undefined'即使在我检查了 func 之后,Typescript 也会出错引用不是未定义的
我想使用airbnb的eslint修改我的代码结构。我已遵循 eslint-config-airbnb 中给出的说明。启动命令后npm run lint,结果由 'fetch' is not Defi
这个问题在这里已经有了答案: What is the consequence of this bit of javascript? (4 个答案) 关闭 9 年前。 我看到一些 jQuery 脚本嵌
我一直收到这个 pouchDB 错误,我不知道这是怎么回事。 Error: connect ENFILE 127.0.0.1:5984 - Local (undefined:undefined)
import os from os.path import abspath, dirname import sys # Set up django project_dir = abspath(dirn
在 javascript 中,要检查变量是否从未创建过,我们只需执行 if (typeof MyVariable !== "undefined"){ ... } 我想知道如何在 CoffeeScrip
我正在尝试编译 FreeLing,它使用 CMake 来检测 Boost。这是负责它的代码: find_package(Boost COMPONENTS regex filesystem thre
我收到“JQUERY 未定义”错误。你有什么想法吗(代码如下)。 $(document).ready(function() { window.print();
无论我是否将 jQuery $.ajax 调用放入 $(document).ready(function() { 中,我都会收到此错误。这是在 ASP.NET MVC .cshtml 文件上.
我正在构建的网站上遇到问题,但数据表不存在加载(在服务器上)但在本地主机(xamp)上工作正常。 Firefox 会抛出错误“$ 未定义”。 我用谷歌搜索了这些错误,我发现一个 friend 的解决方
当我在 $(document).ready 之前明确包含 jQuery 库时,我无法弄清楚为什么它仍然无法识别 jQuery 语法
我是一名优秀的程序员,十分优秀!