fseek(fp, -1L, SEEK_CUR);
时间: 2023-10-24 22:56:46 浏览: 174
这是一个文件操作函数,用于移动文件指针的位置。
其中,第一个参数 fp 是文件指针,指向文件流中的某个位置。
第二个参数 -1L 表示要移动的字节数,这里是负数,表示向前移动。
第三个参数 SEEK_CUR 表示文件指针的起始位置,这里是当前位置。
所以,fseek(fp, -1L, SEEK_CUR) 的作用是将文件指针向前移动一个字节。
相关问题
fseek(fp, 1, SEEK_CUR); 这是往哪个方向移动 举个具体例子
fseek(fp, 1, SEEK_CUR)表示将文件指针(光标)向后移动1个位置,即从当前位置向后移动1个字符位置。举个具体例子,假设文件file.txt中包含以下内容:
```
Hello, world!
```
使用fseek(fp, 1, SEEK_CUR)函数后,文件指针(光标)会移动到第二个字符位置,也就是字符`e`的位置。因此,如果此时再使用fgetc()函数读取一个字符,将会读取到字符`e`。示例代码如下:
```c
#include <stdio.h>
int main() {
FILE *fp;
char ch;
fp = fopen("file.txt", "r");
// 将光标向后移动1位,读取该位置的字符
fseek(fp, 1, SEEK_CUR);
ch = fgetc(fp);
printf("Current char: %c\n", ch);
fclose(fp);
return 0;
}
```
输出结果为:
```
Current char: e
```
因为文件指针(光标)向后移动了1个位置,所以读取到了字符`e`。
FILE *fp; 12 char s[128]; 13 char s1[128]={1,2,3}; 14 if (argc<2) 15 { 16 printf("canshu is error \n"); 17 return -1; 18 19 } 20 if((fp= fopen(argv[1],"a"))==NULL) 21 { 22 perror("fopen"); 23 return -1; 24 } 25 if(fwrite(s1,sizeof(char),128,fp)<0L) 26 { 27 perror("fwrite"); 28 return -1; 29 } 30 if(fseek(fp,0,SEEK_SET)<0) 31 { 32 perror("fseek"); 33 return -1; 34 } 35 36 if(fread(s,sizeof(char),128,fp)<0) 37 { 38 perror("fread"); 39 return -1; 40 } 41 puts(s); 42 printf("-----------------\n"); 43 puts(s1); 44 return 0; 45 } ~ 为啥还是打印不出来
这段代码中,打印不出来的原因可能是因为文件指针在写入数据后没有正确地定位到文件开头,或者读取的数据长度不够。可以在代码中加入以下语句来进行检查:
1. 检查文件指针是否在写入后正确地定位到文件开头:
```
long cur_pos = ftell(fp);
if (cur_pos != 0) {
perror("ftell");
return -1;
}
```
这样可以获取当前文件指针的位置,如果不是0,则说明文件指针没有正确地定位到文件开头。
2. 检查读取的数据是否够128个字节:
```
size_t read_bytes = fread(s, sizeof(char), 128, fp);
if (read_bytes < 128) {
perror("fread");
return -1;
}
```
这样可以获取实际读取的字节数,如果不够128个字节,则说明读取失败。
在加入上述代码后,可以检查一下输出的错误信息,以确定具体的问题所在。
阅读全文