- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我使用SEEK_END
时,我希望它对应于流中最后一个字符的位置。但在 printf 内部似乎没有。
我有一个包含 1010 个字符的文件。我用 fopen
打开它,然后尝试打印该文件最后一个字符的位置:
printf("Last position is: %d\n", SEEK_END);
输出是最后位置是:2
,而我希望它是最后位置是:1010
。 2
不对应于最后一行或最后一列,因为我有 101 行,每行 10 个字符。我不知道那是什么。
奇怪的是,这段代码运行良好:
fseek(file, 0, SEEK_END);
printf("Last position is: %d\n", ftell(file));
输出为最后位置为:1010
。但这里的问题是我正在文件中移动虚拟光标,这是我不想要的。
如何在不改变虚拟光标位置的情况下打印SEEK_END
的值,更重要的是,为什么我的printf
输出2
?
最佳答案
你有一个误会。 SEEK_END
并不是一个以某种方式存储您现在正在考虑的文件长度的神奇符号。它是一个常量,用作告诉 fseek()
对于指定文件偏移量使用哪个引用点的代码。
如果您想确定已知名称的文件的大小,并且您使用的是 POSIX 系统,那么您可以使用 fstat()
。如果您拥有的只是一个 FILE *
,那么您最好的选择可能是记录当前位置,查找流的末尾,确定位置,然后返回到起点:
fpos_t current;
long end;
/* error checks omitted for brevity */
fgetpos(file, ¤t);
fseek(file, 0, SEEK_END);
end = ftell(file);
fsetpos(file, ¤t);
printf("Last position is: %ld\n", end);
当然,这一切都取决于流是否可搜索。并非所有人都是。如果您有一个不可查找的流,那么很可能对其最后位置一开始就没有任何意义。
文件偏移量超过 long
的大小也存在潜在问题。 fgetpos()
和 fsetpos()
预计对此不会敏感,但它们附带的 fpos_t
类型可能是聚合类型(即一个结构),因此不能直接询问。您可以使用 lseek() 解决这个问题,但它来自 POSIX,而不是标准 C。
关于C: printf 中的 SEEK_END 显示意外值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43810610/
所以我以这种格式将结构存储到顺序文件 "%d %s %s %f" 我想知道的是,如果我正在从文件中寻找最后一条记录,并且当我使用 fscanf 时,我使用 fseek(*val,offset*-1,S
这个问题在这里已经有了答案: How do you determine the size of a file in C? (13 个回答) 7年前关闭。 我的问题很简单: 我应该使用 fseek 和
我正在开发一个带有操纵杆的 C 程序,我想获取最后一个事件,即 js0 文件的最后一行。我试图将光标移到最后一个元素之前,但它似乎不起作用。知道为什么吗? int fd = open ("/dev/i
所以我正在尝试从大学的片段中学习 C 文件 IO 操作。我的问题是 SEEK_END 没有像我期望的那样工作。 让 met 为您提供更多详细信息: 输入.txt: abcd-abcd-abcd 代码:
这个问题已经有答案了: Understanding undefined behavior for a binary stream using fseek(file, 0, SEEK_END) with
当我使用SEEK_END时,我希望它对应于流中最后一个字符的位置。但在 printf 内部似乎没有。 我有一个包含 1010 个字符的文件。我用 fopen 打开它,然后尝试打印该文件最后一个字符的位
如果我有一个以二进制形式打开的包含以下内容的文本文件 1234567890 这样的调用: fseek(fp, 5L, SEEK_SET); 当我调用 (char)fgetc(fp) 时给我 6,因为我
我正在尝试将字符串附加到包含 json 字符串的文件。为此,我必须删除最后一个括号“]”,并将新字符串追加到文件末尾。这就是我尝试这样做的方式: $fh = fopen($target_file, '
我正在尝试将字符串附加到包含 json 字符串的文件。为此,我必须删除最后一个括号“]”,并将新字符串追加到文件末尾。这就是我尝试这样做的方式: $fh = fopen($target_file, '
假设我们有一个包含字符串“0123456789”的文件“x”。 我们打开文件并有一个文件描述符fd。 我们可以执行 read(fd, some_buffer, 5) 从文件中将 5 个值读入缓冲区。
我已将问题简化为以下基本函数,它应该简单地打印文件中的字节数。 当我对一个 83886080 字节 (80 MB) 的文件执行它时,它会打印出正确的数字。但是,对于 4815060992 字节 (4.
C 规范有一个有趣的脚注 (#268 C11dr §7.21.3 9) "Setting the file position indicator to end-of-file, as with fse
我使用的系统是Linux。 代码: #include #include #include void main() { int rbytes,wbytes,fd1,local; char
情况 我正在尝试以编程方式将一些代码写入文件,然后进行编译。我需要能够在不替换整个文件的情况下添加代码。我在文件末尾有一个 },我需要删除它才能添加下一批代码,然后重新添加 }。 我的代码目前是这样的
这段代码引入了未定义的行为,我说的对吗? #include #include FILE *f = fopen("textfile.txt", "rb"); fseek(f, 0, SEEK_END
难道我们不应该为 whence 使用 SEEK_CUR/SEEK_SET 或 SEEK_END 吗?它如何只使用固定值? 最佳答案 SEEK_SET/SEEK_CUR/SEEK_END分别为0/1/2
我是一名优秀的程序员,十分优秀!