我们专注攀枝花网站设计 攀枝花网站制作 攀枝花网站建设
成都网站建设公司服务热线:400-028-6601

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

c语言+函数修改数据 c语言数据类型

C语言中什么函数可以修改文件内容(可以随意删除原内容的一部分)?

C语言文件操作详解

创新互联公司是专业的闻喜网站建设公司,闻喜接单;提供成都网站设计、网站建设、外贸网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行闻喜网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

C语言中没有输入输出语句,所有的输入输出功能都用 ANSI C提供的一组标准库函数来实现。文件操作标准库函数有:

文件的打开操作 fopen 打开一个文件

文件的关闭操作 fclose 关闭一个文件

文件的读写操作 fgetc 从文件中读取一个字符

  fputc 写一个字符到文件中去

  fgets 从文件中读取一个字符串

  fputs 写一个字符串到文件中去

  fprintf 往文件中写格式化数据

  fscanf 格式化读取文件中数据

  fread 以二进制形式读取文件中的数据

  fwrite 以二进制形式写数据到文件中去

  getw 以二进制形式读取一个整数

  putw 以二进制形式存贮一个整数

 文件状态检查函数 feof 文件结束

  ferror 文件读/写出错

  clearerr 清除文件错误标志

  ftell 了解文件指针的当前位置

文件定位函数 rewind 反绕

  fseek 随机定位

# 文件的打开

 1.函数原型

FILE *fopen(char *pname,char *mode)

 2.功能说明

按照mode 规定的方式,打开由pname指定的文件。若找不到由pname指定的相应文件,就按以下方式之一处理:

(1) 此时如mode 规定按写方式打开文件,就按由pname指定的名字建立一个新文件;

(2) 此时如mode 规定按读方式打开文件,就会产生一个错误。

打开文件的作用是:

(1)分配给打开文件一个FILE 类型的文件结构体变量,并将有关信息填入文件结构体变量;

(2)开辟一个缓冲区;

(3)调用操作系统提供的打开文件或建立新文件功能,打开或建立指定文件;

FILE *:指出fopen是一个返回文件类型的指针函数;

 3.参数说明

pname:是一个字符指针,它将指向要打开或建立的文件的文件名字符串。

mode:是一个指向文件处理方式字符串的字符指针。所有可能的文件处理方式见表8.1

 4.返回值

 正常返回:被打开文件的文件指针。

 异常返回:NULL,表示打开操作不成功。

例如:

//定义一个名叫fp文件指针

FILE *fp;

//判断按读方式打开一个名叫test的文件是否失败

if((fp=fopen("test","r")) == NULL)//打开操作不成功

{

printf("The file can not be opened.\n");  

exit(1);//结束程序的执行

}

 要说明的是:C语言将计算机的输入输出设备都看作是文件。例如,键盘文件、屏幕文件等。ANSI C标准规定,在执行程序时系统先自动打开键盘、屏幕、错误三个文件。这三个文件的文件指针分别是:标准输入stdin、标准输出stdout和标准出错 stderr。

* 文件的关闭

1. 函数原型

int fclose(FILE *fp);

2. 功能说明

关闭由fp指出的文件。此时调用操作系统提供的文件关闭功能,关闭由fp-fd指出的文件;释放由fp指出的文件类型结构体变量;返回操作结果,即0或EOF。

3. 参数说明

fp:一个已打开文件的文件指针。

4. 返回值

正常返回:0。

异常返回:EOF,表示文件在关闭时发生错误。

例如:

int n=fclose(fp);

*文件的读写操作

A. 从文件中读取一个字符

1. 函数原型

int fgetc(FILE *fp);

2. 功能说明

从fp所指文件中读取一个字符。

3. 参数说明

fp:这是个文件指针,它指出要从中读取字符的文件。

4. 返回值

正常返回: 返回读取字符的代码。

非正常返回:返回EOF。例如,要从"写打开"文件中读取一个字符时,会发生错误而返回一个EOF。

5. 实例

【例】显示指定文件的内容。

//程序名为:display.c

//执行时可用:display filename1 形式的命令行运行。显示文件filename1中的内容。例如,执行命令行display display.c将在屏幕上显示display的原代码。

//File display program.

#include stdio.h

void main(int argc,char *argv[]) //命令行参数

{

int ch;//定义文件类型指针

FILE *fp;//判断命令行是否正确

if(argc!=2)

{

printf("Error format,Usage: display filename1\n");

return; //键入了错误的命令行,结束程序的执行

}

//按读方式打开由argv[1]指出的文件

if((fp=fopen(argv[1],"r"))==NULL)

{

printf("The file %s can not be opened.\n",argv[1]);//打开操作不成功

return;//结束程序的执行

}

//成功打开了argv[1]所指文件

ch=fgetc(fp); //从fp所指文件的当前指针位置读取一个字符

while(ch!=EOF) //判断刚读取的字符是否是文件结束符

{

putchar(ch); //若不是结束符,将它输出到屏幕上显示

ch=fgetc(fp); //继续从fp所指文件中读取下一个字符

} //完成将fp所指文件的内容输出到屏幕上显示

fclose(fp); //关闭fp所指文件

}

B. 写一个字符到文件中去

1. 函数原型

int fputc(int ch,FILE *fp)

2. 功能说明

把ch中的字符写入由fp指出的文件中去。

3. 参数说明

ch:是一个整型变量,内存要写到文件中的字符(C语言中整型量和字符量可以通用)。

fp:这是个文件指针,指出要在其中写入字符的文件。

4. 返回值

正常返回: 要写入字符的代码。

非正常返回:返回EOF。例如,要往"读打开"文件中写一个字符时,会发生错误而返回一个EOF。

5. 实例

【例】将一个文件的内容复制到另一个文件中去。

//程序名为:copyfile.c

//执行时可用:copyfile filename1 filename2形式的命令行运行,将文件filename1中的内容复制到文件filename2中去。

//file copy program.

#include stdio.h

void main(int argc,char *argv[]) //命令行参数

{

int ch;

FILE *in,*out; //定义in和out两个文件类型指针

if(argc!=3) //判断命令行是否正确

{

printf("Error in format,Usage: copyfile filename1 filename2\n");

return; //命令行错,结束程序的执行

}

//按读方式打开由argv[1]指出的文件

if((in=fopen(argv[1],"r"))==NULL)

{

printf("The file %s can not be opened.\n",argv[1]);

return; //打开失败,结束程序的执行

}

//成功打开了argv[1]所指文件,再

//按写方式打开由argv[2]指出的文件

if((out=fopen(argv[2],"w"))==NULL)

{

printf("The file %s can not be opened.\n",argv[2]);

return; //打开失败,结束程序的执行

}

//成功打开了argv[2]所指文件

ch=fgetc(in); //从in所指文件的当前指针位置读取一个字符

while(ch!=EOF) //判断刚读取的字符是否是文件结束符

{

fputc(ch,out); //若不是结束符,将它写入out所指文件

ch=fgetc(in); //继续从in所指文件中读取下一个字符

} //完成将in所指文件的内容写入(复制)到out所指文件中

fclose(in); //关闭in所指文件

fclose(out); //关闭out所指文件

}

【例】按十进制和字符显示文件代码,若遇不可示字符就用井号"#"字符代替之。

//程序名为:dumpf.c

//执行时可用:dumpf filename1 形式的命令行运行。

// File dump program.

#include stdio.h

void main(int argc,char *argv[])

{

char str[9];

int ch,count,i;

FILE *fp;

if(argc!=2)

{

printf("Error format,Usage: dumpf filename\n");

return;

}

if((fp=fopen(argv[1],"r"))==NULL)

{

printf("The file %s can not be opened.\n",argv[1]);

return;

}

count=0;

do{

i=0;

//按八进制输出第一列,作为一行八个字节的首地址

printf("%06o: ",count*8);

do{

// 从打开的文件中读取一个字符

ch=fgetc(fp);

// 按十进制方式输出这个字符的ASCII码

printf("%4d",ch);

// 如果是不可示字符就用"#"字符代替

if(ch' '||ch'~') str[i]='#';

// 如果是可示字符,就将它存入数组str以便形成字符串

else str[i]=ch;

// 保证每一行输出八个字符

if(++i==8) break;

}while(ch!=EOF); // 遇到文件尾标志,结束读文件操作

str[i]='\0'; // 在数组str加字符串结束标志

for(;i8;i++) printf(" "); // 一行不足八个字符用空格填充

printf(" %s\n",str); // 输出字符串

count++; // 准备输出下一行

}while(ch!=EOF); // 直到文件结束

fclose(fp); // 关闭fp所指文件

}

C. 从文件中读取一个字符串

1. 函数原型

char *fgets(char *str,int n,FILE *fp)

2. 功能说明

从由fp指出的文件中读取n-1个字符,并把它们存放到由str指出的字符数组中去,最后加上一个字符串结束符'\0'。

3. 参数说明

str:接收字符串的内存地址,可以是数组名,也可以是指针。

n: 指出要读取字符的个数。

fp:这是个文件指针,指出要从中读取字符的文件。

4. 返回值

正常返回:返回字符串的内存首地址,即str的值。

非正常返回:返回一个NULL值,此时应当用feof()或ferror()函数来判别是读取到了文件尾,还是发生了错误。例如,要从"写打开"文件中读取字符串,将

发生错误而返回一个NULL值。

D. 写一个字符串到文件中去

1. 函数原型

int fputs(char *str,FILE *fp)

2. 功能说明

把由str指出的字符串写入到fp所指的文件中去。

3. 参数说明

str:指出要写到文件中去的字符串。

fp:这是个文件指针,指出字符串要写入其中的文件。

4. 返回值

正常返回: 写入文件的字符个数,即字符串的长度。

非正常返回:返回一个NULL值,此时应当用feof()或ferror()函数来判别是读取到了文件尾,还是发生了错误。例如,要往一个"读打开" 文件中写字符串时,

会发生错误而返回一个NULL值。

5.实例

【例】以下程序将一个文件的内容附加到另一个文件中去。

//程序名:linkfile.c

//执行时可用:linkfile filename1 filename2形式的命令行运行,将文件filename2的内容附加在文件filename1之后。

// file linked program.

#include stdio.h

#define SIZE 512

void main(int argc,char *argv[])

{

char buffer[SIZE];

FILE *fp1,*fp2;

if(argc!=3)

{

printf("Usage: linkfile filename1 filename2\n");

return;

}

// 按追加方式打开argv[1] 所指文件

if((fp1=fopen(argv[1],"a"))==NULL)

{

printf("The file %s can not be opened.\n",argv[1]);

return;

}

if((fp2=fopen(argv[2],"r"))==NULL)

{

printf("The file %s can not be opened.\n",argv[2]);

return;

}

// 读入一行立即写出,直到文件结束

while(fgets(buffer,SIZE,fp1)!=NULL)

printf("%s\n",buffer);

while(fgets(buffer,SIZE,fp2)!=NULL)

fputs(buffer,fp1);

fclose(fp1);

fclose(fp2);

if((fp1=fopen(argv[1],"r"))==NULL)

{

printf("The file %s can not be opened.\n",argv[1]);

return;

}

while(fgets(buffer,SIZE,fp1)!=NULL)

printf("%s\n",buffer);

fclose(fp1);

}

写一个函数修改数组中的数据,在主函数中调用它。(C语言)?

#includestdio.h

// 用于修改数组的函数

int change_array(int *num, int count)

{

int i,t;

for(i = 0; i count; i++)

{

t = num[i];

num[i] = t + 1;

}

}

int main()

{

int i, b[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

// 调用函数

change_array(b, 10);

// 输出结果

for(i = 0; i 10; ++i)

{

printf("%d ", b[i]);

}

}

c语言中函数可否改变参数值

#include

void

foo(int

x,

int

y,

int

z)

{

printf("x

=

%d

at

[%x]n",

x,

x);

printf("y

=

%d

at

[%x]n",

y,

y);

printf("z

=

%d

at

[%x]n",

z,

z);

}

int

main(int

argc,

char

*argv[])

{

foo(100,

200,

300);

return

0;

}

运行结果:

x

=

100

at

[bfe28760]

y

=

200

at

[bfe28764]

z

=

300

at

[bfe28768]

c程序栈底为高地址,栈顶为低地址,因此上面的实例可以说明函数参数入栈顺序的确是从右至左的。可到底为什么呢?查了一直些文献得知,参数入栈顺序是和具体编译器实现相关的。比如,pascal语言中参数就是从左到右入栈的,有些语言中还可以通过修饰符进行指定,如visual

c++.即然两种方式都可以,为什么c语言要选择从右至左呢?

进一步发现,pascal语言不支持可变长参数,而c语言支持这种特色,正是这个原因使得c语言函数参数入栈顺序为从右至左。具体原因为:c方式参数入栈顺序(从右至左)的好处就是可以动态变化参数个数。通过栈堆分析可知,自左向右的入栈方式,最前面的参数被压在栈底。除非知道参数个数,否则是无法通过栈指针的相对位移求得最左边的参数。这样就变成了左边参数的个数不确定,正好和动态参数个数的方向相反。

因此,c语言函数参数采用自右向左的入栈顺序,主要原因是为了支持可变长参数形式。换句话说,如果不支持这个特色,c语言完全和pascal一样,采用自左向右的参数入栈方式


网页题目:c语言+函数修改数据 c语言数据类型
浏览路径:http://shouzuofang.com/article/hggeie.html

其他资讯