❶ c語言文件指針可以設為全局嗎,或者可以在多個子程序中對同一個文件連續操作嗎
文件讀寫後關閉沒有,關閉了只有再次打開了。沒關閉是可以繼續用的。
❷ 文件指針可以賦值嗎 比如,首先聲明一個FILE *p1,*p2,*p3; p2=p1;這條語句對嗎!!!
FILE *p1,*p2,*p3;
剛聲明了文件指針,文件指針是空的
馬上執行:
p2=p1;
語法是允許的,但 p1 還沒有初始化呢。
就如:int a,b;
馬上執行:b=a; a 還沒有初始化呢。
文件指針 指向的對象,通常是從成功地 fopen 打開文件獲得。獲得後,與一般指針一樣,運算規則相同。
❸ 文件指針的作用
不知道樓主是使用哪種編程語言。 在C語言上,文件型指針就是指FILE類型的指針,它指向一個文件類型的結構,結構里包含著該文件的各種屬性。 文件指針用於跟蹤當前文件的位置。比如,你向文件輸入一個位元組,那麼文件指針就是自動地向前移動一個位元組的位置。 至於使用文件指針的好處,我學了這么久也沒有想過。大概是可以隨機訪問文件和把I/O操作是抽象為文件操作吧。
❹ C語言中通過文件指針訪問文件有什麼好處
文件指針指向文件中的每一個位元組,不用你做++操作,會自動指向下一個位元組。
但是你也可以自己改變它的位置。例如:
fseek
ftell
❺ 如何定義指向文件的指針
指向文件的指針也就是文件指針,可以用FILE來定義一個文件指針。格式如下:
FILE *文件指針;
FILE:文件緩沖區的類型名,必須大寫
文件指針:指向文件緩沖區的指針
例如: FILE *fp; // 定義一個文件指針fp
註:使用文件指針的時候,必須將頭文件#include<stdio.h>包含進源文件中。
❻ 文件指針怎麼用
#include <string>
#include <stdio.h>
#include <math.h>
using namespace std;
//////////////////////////////////////////////////////////
//在C盤建了個TXT文件,C:\\1.txt
//兩文件要求每行最後是回車鍵,每個數之間用逗號分隔
//函數功能:計算文件中數據的標准差和均值
//作者:niut
//如有高手,本人系初學,請指正。
///////////////////////////////////////////////////////////
//計算文本文件中一行字元串的長度
int calLength(char* t)
{
int len = 0;
while(t[len] !='\n')
{
len ++;
}
return len;
}
//求一行數據中的最大值
int getMax(char* data,int length,char* tem)
{
memset(tem,0x00,length);
int max = 0;
int i = 0;
int j=0;
while(i<length)
{
while(data[i] !=',')
{
tem[j]=data[i];
i++;
j++;
if(data[i] =='\n')
break;
}
tem[j]='\0';
i++;
if(max<atoi(tem))
{
max =atoi(tem);
j=0;
memset(tem,0x00,length);
}
else
{
j=0;
memset(tem,0x00,length);
}
}
return max;
}
//求一行數據中的數據個數及數據之和
double CalculateSumandCount(char* data,int length,char* tem,int *count,int *sum)
{
memset(tem,0x00,length);
int i = 0;
int j=0;
double average = 0;
while(i<length)
{
while(data[i] !=',')
{
tem[j]=data[i];
i++;
j++;
if(data[i] =='\n')
break;
}
tem[j]='\0';
*sum += atoi(tem);
(*count)++;
i++;
j=0;
memset(tem,0x00,length);
}
average = 1.0*(*sum)/(*count);
return average;
}
//計算標准差
double CalculateStandardDeviation(char* data,int length,char* tem,double av,int count)
{
double sd = 0;
if(*data !='\n')
{
double sum = 0.0;
memset(tem,0x00,length);
int i = 0;
int j=0;
while(i<length)
{
while(data[i] !=',')
{
tem[j]=data[i];
i++;
j++;
if(data[i] =='\n')
break;
}
tem[j]='\0';
sum += (atoi(tem)-av)*(atoi(tem)-av);
i++;
j=0;
memset(tem,0x00,length);
}
sd = sqrt((sum)*1.0/count);
}
return sd;
}
void main()
{
FILE *data1=fopen("C:\\1.txt","r");
int len = 0;
int max1 = 0;
int num = 0;//文件中數字的個數
int sum = 0;//文件中數的總和
double av =0.0;//均值
double st =0.0;
char* datatem1 = (char*)malloc(sizeof(char)*1024);
char* t1= (char*) malloc(sizeof(char)*1024);
if(data1 ==NULL)
{
printf("source file is not exist!\n");
}
else
{
memset(datatem1,0x00,1024);
while(fgets(datatem1,1024,data1) !=NULL)
{
len = calLength(datatem1);
av =CalculateSumandCount(datatem1,len,t1,&num,&sum);
st =CalculateStandardDeviation(datatem1,len,t1,av,num);
}
}
printf("%d,%d\n",sum,num);
printf("%f\n",av);
printf("%f\n",st);
system("PAUSE");
}
❼ 文件指針是什麼文件指針的值又是什麼
在文件操作系統中,同時打開的文件個數是受限的,因此在操作系統中對於文件的操作專門設置了一個區域,這個區中為每個文件操作開設了一塊操作數據區,其中每個區對應一個文件操作,記錄文件位置,當前文件指針位置等,如果進行文件操作需要獲得系統分配的一塊有效的數據區,這個數據區的編號就是文件句柄,在c中是FILE*類型
操作數據區中,有一個文件指針,存放當前可讀寫文件位置,是一個位元組計數值,在打開當前文件後,這個指針指向文件第1個字元,取值是0,那麼如果馬上讀寫文件都是從文件第1個位元組開始,假定寫入或讀取了1個位元組內容,文件指針在操作完成後自動變為1,指向下一個可操作的位置。文件指針可以順序後移(增加值)也可以前移(減少值)當然要藉助特殊函數。
假定要獲取文件尺寸,可以在打開文件後(文件指針內容為0)利用文件指針操作函數(比如feek)令文件指針轉到文件尾部,這時文件指針取值就是文件的實際位元組數了。
❽ 什麼是指向文件的指針
如果沒有操作系統的基礎,可以直接理解為文件類型變數,對這個變數調用一些文件操作語句就可以影響到具體的問題,例如:
FILE *fp;
char str[255];
fp=fopen("xxx.txt", "r");
fgets(str,255,ftp);
fclose(fp);
上面代碼中的fp就是你說所的指針。
❾ C語言中文件指針能不能作為參數傳遞
1.指針完全可以作為函數的參數進行傳遞,其實在C中,數組作為參數傳遞,跟指針作為參數傳遞都很類似的,指針傳的是該指針指向的地址,而數組參數則是將該數組的首地址傳遞過去。
2.文件指針
在C語言中用一個指針變數指向一個文件,這個指針稱為文件指針。通過文件指針就可對它所指的文件進行各種操作。定義說明文件指針的一般形式為:
FILE *指針變數標識符;
其中FILE應為大寫,它實際上是由系統定義的一個結構,該結構中含有文件名、文件狀態和文件當前位置等信息。在編寫源程序時不必關心FILE結構的細節。在使用文件時,需要在內存中為其分配空間,用來存放文件的基本信息,給結構體類型是由系統定義的,C語言規定該類型為FILE型,其聲明如下:
typedef struct
{
short level;
unsigned flags;
char fd;
unsigned char hold;
short bsize;
unsigned char *buffer;
unsigned ar *curp;
unsigned istemp;
short token;
}FILE;
3.例如:
FILE *fp;
表示fp是指向FILE結構的指針變數,通過fp即可找存放某個文件信息的結構變數,然後按結構變數提供的信息找到該文件,實施對文件的操作。習慣上也把fp稱為文件指針。
❿ 文件指針使用注意事項
一.在定義指針的時候注意連續聲明多個指針時容易犯的錯誤,例如int * a,b;這種聲明是聲明了一個指向int類型變數的指針a和一個int型的變數b,這時候要清醒地記著,而不要混淆成是聲明了兩個int型指針。
二.要避免使用未初始化的指針。很多運行時錯誤都是由未初始化的指針導致的,而且這種錯誤又不能被編譯器檢查所以很難被發現。這時的解決辦法就是盡量在使用指針的時候定義它,如果早定義的化一定要記得初始化,當然初始化時可以直接使用cstdlib中定義的NULL也可以直接賦值為0,這是很好的編程習慣。
三.指針賦值時一定要保證類型匹配,由於指針類型確定指針所指向對象的類型,因此初始化或賦值時必須保證類型匹配,這樣才能在指針上執行相應的操作。
四.void * 類型的指針,其實這種形式只是記錄了一個地址罷了,如上所說,由於不知道所指向的數據類型是什麼所以不能進行相應的操作。其實void * 指針僅僅支持幾種有限的操作:1.與另外的指針進行比較,因為void *類型裡面就是存的一個地址,所以這點很好理解;2.向函數傳遞void *指針或從函數返回void *指針,舉個例子吧,我們平時常用的庫函數qsort中的比較函數cmp(個人習慣於用這個名字)中傳遞的兩個參數就是const void *類型的,用過的應該很熟了;3.給另一個void * 類型的指針賦值。還是強調一下不能使用void * 指針操縱它所指向的對象。
五.不要將兩個指針變數指向同一塊動態內存。這個容易引起很嚴重的問題。如果將兩個指針變數指向同一塊動態內存,而其中一個生命期結束釋放了該動態內存,這個時候就會出現問題,另一個指針所指向的地址雖然被釋放了但該指針並不等於NULL,這就是所謂的懸垂指針錯誤,這種錯誤很難被察覺,而且非常嚴重,因為這時該指針的值是隨機的,可能指向一個系統內存而導致程序崩潰。但也就是因為值是隨機的,所以運行程序時有時正常有時崩潰,這一點要特別注意。
六.在動態delete釋放一個指針所指向的內存後注意將該指針置空。
七.在為一個指針再次分配內存之前一定要保證它原先沒有指向其他內存,防止出現內存泄漏。解決的辦法是我們必須判斷該指針是否為空,這時候就顯示出第六條的優勢,因為如果釋放某內存後相應指針不置空的話就不能為其分配新內存了。所以第六條很有必要。
八.雖然程序在退出main函數時會釋放所有內存空間,但對於大型程序最好還是某塊內存不用了立刻釋放,而不要指望系統最後的回收,因為內存泄漏會慢慢消耗系統資源直到內存不足而程序死掉。
九.在用new動態分配完內存之後一定要判斷是否分配成功,分配成功後才能使用。