解释fseek(ifp,0,SEEK_SET); fwrite(&flength,sizeof(int),1,ofp); fseek(ofp,8,SEEK_SET);中最后一句fseek为什么指针要移到第8位
时间: 2024-05-19 07:12:09 浏览: 89
第一句 `fseek(ifp,0,SEEK_SET);` 是将文件指针 ifp 移动到文件开头,这是为了读取文件内容的长度。第二句 `fwrite(&flength,sizeof(int),1,ofp);` 是将文件内容的长度写入到输出文件 ofp 中,它的目的是为了在读取该文件时知道文件的长度。
而最后一句 `fseek(ofp,8,SEEK_SET);` 则是为了留出文件头的空间,因为在输出文件中文件头占据了前 8 个字节的空间。因此,我们需要将输出文件指针 ofp 移动到第 8 个字节的位置,以便在后续写入文件内容时,不会覆盖文件头的内容。
相关问题
解释fseek(ofp, 4, SEEK_SET); fwrite(&pt1, sizeof(long), 1, ofp); fseek(ofp, pt1, SEEK_SET); fwrite(&n, sizeof(long), 1, ofp); for (i = 0; i < n; i++) { fwrite(&(header[i].b), 1, 1, ofp); c = strlen(header[i].bits); fwrite(&c, 1, 1, ofp); j = strlen(header[i].bits); if (j % 8 != 0) { for (f = j % 8; f < 8; f++) strcat(header[i].bits, "0"); } while (header[i].bits[0] != 0) { c = 0; for (j = 0; j < 8; j++) { if (header[i].bits[j] == '1') c = (c << 1) | 1; else c = c << 1; } strcpy(header[i].bits, header[i].bits + 8); fwrite(&c, 1, 1, ofp); } }
这段代码是将哈夫曼编码表写入到文件中。具体解释如下:
首先使用 fseek 函数将文件指针移动到文件的第 4 个字节处,然后将 pt1 的值以 long 类型写入文件。接着使用 fseek 函数将文件指针移动到 pt1 所指向的位置,然后将 n 的值以 long 类型写入文件。接下来使用 for 循环将每个字符的哈夫曼编码写入文件中。
对于每个字符,先将其对应的编码长度 c 以一个字节的形式写入文件中,然后将该字符的哈夫曼编码字符串转化为二进制数,每 8 位转化为一个字节并写入文件中。如果哈夫曼编码字符串的长度不是 8 的倍数,则在字符串末尾补 0 直到长度为 8 的倍数。这里使用了 strcpy 和 strcat 函数来操作字符串。
fseek SEEK_SET
下面是使用fseek函数设置文件指针stream的位置,使其指向文件开头的例子:
```c
#include <stdio.h>
int main() {
FILE *fp;
char c;
fp = fopen("test.txt", "r");
if (fp == NULL) {
printf("Failed to open file\n"); return 1;
}
// 设置文件指针stream的位置,使其指向文件开头
fseek(fp, 0, SEEK_SET);
// 读取文件中的字符并输出
while ((c = fgetc(fp)) != EOF) {
printf("%c", c);
}
fclose(fp);
return 0;
}
```
阅读全文