您的位置:首页 > 其它

字符、字符串(行)、块(文件)读写文件流

2012-05-28 14:26 148 查看
1、 字符读写文件流

l fgetc(由文件中读取一个字符——字符读写文件流)

相关函数 open,fread,fscanf,getc

表头文件 include <stdio.h>

定义函数 int fgetc(FILE *stream);

函数说明 fgetc()从参数stream所指的文件中读取一个字符。若读到文件尾而无数据时便返回EOF。

返回值 getc()会返回读取到的字符,若返回EOF则表示到了文件尾。

范例

#include <stdio.h>

main()

{

FILE *fp;

int c;

fp = fopen(“exist”,”r”);

while((c=fgetc(fp))!=EOF)

printf(“%c”,c);

fclose(fp);

}

l getc(由文件中读取一个字符)

相关函数 read,fopen,fread,fgetc

表头文件 #include<stdio.h>

定义函数 int getc(FILE * stream);

函数说明 getc()用来从参数stream所指的文件中读取一个字符。若读到文件尾而无数据时便返回EOF(-1)。虽然getc()与fgetc()作用相同,但getc()为宏定义,非真正的函数调用。

返回值 getc()会返回读取到的字符,若返回EOF则表示到了文件尾。

范例 参考fgetc()。

l getchar(由标准输入设备内读进一字符)

相关函数 fopen,fread,fscanf,getc

表头文件 #include <stdio.h>

定义函数 int getchar(void);

函数说明 getchar()用来从标准输入设备中读取一个字符。然后将该字符从unsigned
char转换成int后返回。

返回值 getchar()会返回读取到的字符,若返回EOF则表示有错误发生。

附加说明 getchar()非真正函数,而是getc(stdin)宏定义。

范例

#include <stdio.h>

main()

{

FILE * fp;

int c,i;

for(i=0li<5;i++)

{

c=getchar();

putchar(c);

}

}

执行 1234 /*输入*/

1234 /*输出*/

l fputc(将一指定字符写入文件流中)

相关函数 fopen,fwrite,fscanf,putc

表头文件 #include <stdio.h>

定义函数 int fputc(int c, FILE * stream);

函数说明 fputc 会将参数c 转为unsigned
char 后写入参数stream 指定的文件中。

返回值 fputc()会返回写入成功的字符,即参数c。若返回EOF则代表写入失败。

范例 #include <stdio.h>

main()

{

FILE * fp;

char a[26] = ”abcdefghijklmnopqrstuvwxyz”;

int i;

fp= fopen(“noexist”,”w”);

for(i=0;i<26;i++)

fputc(a[i],fp);

fclose(fp);

}

l putc(将一指定字符写入文件中)

相关函数 fopen,fwrite,fscanf,fputc

表头文件 #include<stdio.h>

定义函数 int putc(int c,FILE * stream);

函数说明 putc()会将参数c转为unsigned
char后写入参数stream指定的文件中。虽然putc()与fputc()作用相同,但putc()为宏定义,非真正的函数调用。

返回值 putc()会返回写入成功的字符,即参数c。若返回EOF则代表写入失败。

范例 参考fputc()。

l putchar(将指定的字符写到标准输出设备)

相关函数 fopen,fwrite,fscanf,fputc

表头文件 #include<stdio.h>

定义函数 int putchar (int c);

函数说明 putchar()用来将参数c字符写到标准输出设备。

返回值 putchar()会返回输出成功的字符,即参数c。若返回EOF则代表输出失败。

附加说明 putchar()非真正函数,而是putc(c,stdout)宏定义。

范例 参考getchar()。







2、 行读写文件流

l puts(将字符串写入标准输出流stdout)

相关函数 fopen,fread,fscanf,fgets

表头文件 #include <stdio.h>

定义函数 int *puts(char *s);

函数说明 puts()将s指向的以空字符结尾的字符串(后接换行符,但不写入终止空字符)写入标准输出流stdout。

返回值 puts()若成功则返回非负整数,否则返回EOF。

范例 参考fgets()

#include"stdio.h"

main()

{

static char c[] = "This is just a test\ndhaha…";

puts(c);

}

从程序中可以看出puts函数中可以使用转义字符,因此输出结果成为两行。puts函数完全可以由printf函数取代。当需要按一定格式输出时,通常使用printf函数。

l fputs(将一指定的字符串写入文件内)

相关函数 fopen,fwrite,fscanf,fputc,putc

表头文件 #include<stdio.h>

定义函数 int fputs(const char * s, FILE * stream);

函数说明 fputs()用来将参数s所指的字符串写入到参数stream所指的文件内(但不追加换行符,也不写入终止空字符)。

返回值 若成功则返回写出的字符个数,返回EOF则表示有错误发生。

范例 请参考fgets()。

l gets(从标准输入设备读进一字符串)

相关函数 fopen,fread,fscanf,fgets

表头文件 #include <stdio.h>

定义函数 char * gets(char *s);

函数说明 gets()用来从标准设备读入字符并存到参数s所指的内存空间,直到出现换行字符或读到文件尾为止,最后加上NULL作为字符串结束。

返回值 gets()若成功则返回s指针,返回NULL则表示有错误发生。

附加说明 由于gets()无法知道字符串s的大小,必须遇到换行字符或文件尾才会结束输入,因此容易造成缓冲溢出的安全性问题。建议使用fgets()取代。

范例 参考fgets()

#include "stdio.h"

main()

{

char st[15];

printf("input string:\n");

gets(st);

puts(st);

}

可以亲自调试一下,当输入的字符串中含有空格时,输出仍为全部字符串。说明gets函数并不以空格作为字符串输入结束的标志,而只以回车作为输入结束,这是与scanf函数不同的。

l fgets(由文件中读取一字符串——行读写文件流)

相关函数 open,fread,fscanf,getc

表头文件 include <stdio.h>

定义函数 char * fgets(char * s, int size, FILE * stream);

函数说明 fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束。

返回值 gets()若成功则返回s指针,返回NULL则表示有错误发生。

范例 #include<stdio.h>

main()

{

char s[80];

fputs(fgets(s, 80, stdin), stdout);

}

执行

this is a test /*输入*/

this is a test /*输出*/



3、 块读写文件流

l fread(从文件流读取数据)

相关函数 fopen,fwrite,fseek,fscanf

表头文件 #include <stdio.h>

定义函数 size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream);

函数说明 fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。fread()会返回实际读取到的nmemb数目,如果此值比参数nmemb 来得小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么情况。

返回值 返回实际读取到的nmemb数目。

#include <stdio.h>

int main(int argc, char **argv)

{

struct student{

char name[10];

int number;

};

FILE *fp = NULL;

int i;

struct student boya[2], boyb[2], *pp, *qq;

if(NULL == (fp = fopen("aa.txt", "w+"))){

perror("can not open aa.txt!");

return (-1);

}

pp = boya;

qq = boyb;

printf("please input two students' name and number:\n");

for(i = 0; i < 2; i++, pp++){

scanf("%s\t%d", pp->name, &(pp->number));

}

pp = boya;

fwrite(pp, sizeof(struct student), 2, fp);

rewind(fp);

fread(qq, sizeof(struct student), 2, fp);

printf("name\t\t number\n");

for(i = 0; i < 2; i++, qq++){

printf("%s\t\t %d\n", qq->name, qq->number);

}

fclose(fp);

return (0);

}



执行:

Holy 0

Shit 1





结果:

Name number

Holy 0

Shit 1



l fwrite(将数据写至文件流)

相关函数 fopen,fread,fseek,fscanf

表头文件 #include<stdio.h>

定义函数 size_t
fwrite(const void * ptr, size_t size, size_t nmemb, FILE * stream);

函数说明 fwrite()用来将数据写入stream所指定的文件流中。参数stream为已打开的文件指针,参数ptr 指向欲被写入的数据地址,总共写入的字符数以参数size*nmemb来决定。fwrite()会返回实际写入的nmemb数目。

返回值 返回实际写入的nmemb数目。

范例 参考fread()。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐