4 回答

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
while (*buf != '\0')
{
write(fd, buf++, 1);
printf("length = %ld\n", ftell(file));
}
while每次循環(huán)都會(huì)輸出length,而write(fd, buf++, 1); 中你定義的長(zhǎng)度是1,所以每次輸出都是1.

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
函數(shù)名: fscanf
功 能: 從一個(gè)流中執(zhí)行格式化輸入,fscanf遇到空格和換行時(shí)結(jié)束,注意空格時(shí)也結(jié)束。這與fgets有區(qū)別,fgets遇到空格不結(jié)束。
返回值:整型,成功返回讀入的參數(shù)的個(gè)數(shù),失敗返回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一樣,格式化串的空格不代表讀取的子串有空格,存放讀取數(shù)據(jù)的參數(shù)都是指針。
擴(kuò)展閱讀,C語言中文件的讀取和寫:
FILE *pFile=fopen("1.txt","r"); //獲取文件的指針
char *pBuf; //定義文件指針
fseek(pFile,0,SEEK_END); //把指針移動(dòng)到文件的結(jié)尾 ,獲取文件長(zhǎng)度
int len=ftell(pFile); //獲取文件長(zhǎng)度
pBuf=new char[len+1]; //定義數(shù)組長(zhǎng)度
rewind(pFile); //把指針移動(dòng)到文件開頭 因?yàn)槲覀円婚_始把指針移動(dòng)到結(jié)尾,如果不移動(dòng)回來 會(huì)出錯(cuò)
fread(pBuf,1,len,pFile); //讀文件
pBuf[len]=0; //把讀到的文件最后一位 寫為0 要不然系統(tǒng)會(huì)一直尋找到0后才結(jié)束
MessageBox(pBuf); //顯示讀到的數(shù)據(jù)
fclose(pFile); // 關(guān)閉文件
添加回答
舉報(bào)