如何使用 fseek 设置文件指针

发布于 2024-10-23 12:27:21 字数 193 浏览 5 评论 0原文

我知道打印此字符串后我的文件指针位于行尾:“xyz”。

我怎样才能把它放到行的开头? (指向x)

offset = ftell(fp);
fseek(fp, offset - sizeof("xyz") , SEEK_SET);

上面似乎不起作用。

我怎样才能做到这一点?

I know my file pointer is at end of the line after printing this string: "xyz".

How can I get it to the start of the line? (pointing to x)

offset = ftell(fp);
fseek(fp, offset - sizeof("xyz") , SEEK_SET);

Above doesn't seem to work.

How can I achieve that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

笔落惊风雨 2024-10-30 12:27:21

在读取/写入“xyz”之前,我会通过发出 beginning = ftell(fp) 来存储偏移量。
然后fseek(fp,开始,SEEK_SET);

这可能吗?

I would store the offset by issuing a beginning = ftell(fp) before reading/writing you "xyz".
Then fseek(fp, beginning, SEEK_SET);

Would this be possible?

音栖息无 2024-10-30 12:27:21

sizeof("xyz") 将返回 4,因为您有三个字符加上终止 null。您应该使用 strlen("xyz") 来代替,或者从 sizeof 结果中减去 1 以解决空值。

sizeof("xyz") will return 4 since you have the three characters plus the terminating null. You should use strlen("xyz") instead or subtract one from the sizeof result to account for the null.

奈何桥上唱咆哮 2024-10-30 12:27:21

由于"xyz"的类型是char const *sizeof("xyz")将返回标准指针的大小,通常为 4 或 8。

另请注意,仅当文件以二进制模式打开时,fseek 才能在 文本 模式下工作,因为这是不可能的告诉底层主机系统上的换行符有多大。

另外,最好使用SEEK_CUR,因为它会增加相对于当前位置的读/写点。

As the type of "xyz" is char const *, sizeof("xyz") will return the size of a standard pointer, typically 4 or 8.

Also note that fseek does not work in text mode, only if the file has been opened in binary mode, as it's not possible to tell how big newlines are on the underlying host system.

In addition, it's better to use SEEK_CUR, as it will more the read/write point relative to the current position.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文