为了账号安全,请及时绑定邮箱和手机立即绑定

ftell函数的问题?

ftell函数的问题?

墨色风雨 2019-04-03 11:07:16
#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(void){FILE* file = NULL;if ((file = fopen("log", "w+")) == NULL){ perror("fopen");return -1; } char *buf = "qwertyuiopasdfg";int fd = fileno(file);while (*buf != '\0'){ write(fd, buf++, 1); printf("length = %ld\n", ftell(file));} return 0;}为什么 输出的长度都为1呢,write写入后 文件指针不是向后移了吗??
查看完整描述

4 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

write和fwrite都可以实现你的意图。你的程序在TC 2.0调试通过,运行结果输出文件LOG,文件字节数15字节。每次输出字节1的原因是你在write中语句中指定每次输出1字节。

查看完整回答
反对 回复 2019-04-09
?
忽然笑

TA贡献1806条经验 获得超5个赞

while (*buf != '\0')
{
write(fd, buf++, 1);
printf("length = %ld\n", ftell(file));
}
while每次循环都会输出length,而write(fd, buf++, 1); 中你定义的长度是1,所以每次输出都是1.

查看完整回答
反对 回复 2019-04-09
?
12345678_0001

TA贡献1802条经验 获得超5个赞

函数名: fscanf

功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。

返回值:整型,成功返回读入的参数的个数,失败返回EOF(-1)。

用法:

1 int fscanf(FILE*stream,constchar*format,[argument...]);

FILE *stream:文件指针;

char *format:格式字符串;

[argument...]:输入列表。

例如:

FILE* fp;
char a[10];
int b;
double c;
fscanf(fp , "%s %d %lf" , a , &b , &c);
和scanf一样,格式化串的空格不代表读取的子串有空格,存放读取数据的参数都是指针。

扩展阅读,C语言中文件的读取和写:
FILE *pFile=fopen("1.txt","r"); //获取文件的指针
char *pBuf; //定义文件指针
fseek(pFile,0,SEEK_END); //把指针移动到文件的结尾 ,获取文件长度
int len=ftell(pFile); //获取文件长度
pBuf=new char[len+1]; //定义数组长度
rewind(pFile); //把指针移动到文件开头 因为我们一开始把指针移动到结尾,如果不移动回来 会出错
fread(pBuf,1,len,pFile); //读文件
pBuf[len]=0; //把读到的文件最后一位 写为0 要不然系统会一直寻找到0后才结束
MessageBox(pBuf); //显示读到的数据
fclose(pFile); // 关闭文件



查看完整回答
反对 回复 2019-04-09
  • 4 回答
  • 0 关注
  • 866 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信