❶ 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动态分配完内存之后一定要判断是否分配成功,分配成功后才能使用。