ftell函数的问题?

#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写入后 文件指针不是向后移了吗??

墨色风雨
浏览 824回答 4
4回答

慕勒3428872

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

忽然笑

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

12345678_0001

函数名: 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); // 关闭文件
打开App,查看更多内容
随时随地看视频慕课网APP