c語言的讀寫操作

總覽

FILE* fp = fopen("filename", "r/w/a");
fclose(fp);

ch = getc(fp)putc(ch, stdout);

fgets(str, 8, fp1);	
fputs(str, fp);

fscanf(fp1, "%s", chs);
fprintf(fp, "%s", str);

fwrite(a, sizeof(int), 4, fp);
fread(num, sizeof(int), 5, fp1);

詳細介紹

fopen and fclose

打開和關閉文件,打開的形式有讀r、寫w、追加r,“+”的意思是不存在該文件,則先創建此文件。注意,寫的形式會將原來的內存全部刪除。

FILE * fopen ( const char * filename, const char * mode );
int fclose ( FILE * stream );

實例

	FILE* fp;
	if ((fp = fopen(argv[1], "w")) == NULL) {
		printf("Can't open %s file", argv[0]);
		exit(1);
	}
	fclose(fp);

getc and putc

讀寫單個字符

char c = getc(FILE *stream);  // eg, c = getc(stdin), 讀入一個字符
int c = putc(char c, FILE *stream);   // 將c寫進文件流中,成功則返回c,出錯返回EOF

實例

// getc and putc

	/*char ch;
	FILE* fp;	
	if ((fp = fopen(argv[1], "r+")) == NULL) {
		printf("Can't open %s\n", argv[1]);
		exit(1);
	}
	while ((ch = getc(fp)) != EOF) {	// getc
		putc(ch, stdout);				// putc
	}
	fclose(fp);
	*/

fgets and fputs

讀寫一段字符串

char * fgets ( char * str, int num, FILE * stream ); // num爲字符串最大值,包含'\0'
int fputs ( const char * str, FILE * stream ); // 成功則返回非負數,出錯返回EOF

實例

// fgets and fputs
	if ((fp = fopen(argv[1], "w+")) == 	NULL) {
		printf("Can't open %s\n", argv[1]);
		exit(1);
	}

	char str[20];
	gets(str);
	fputs(str, fp);						// fputs
	fclose(fp);

	FILE *fp1= fopen(argv[1], "r");
	fgets(str, 8, fp1);					// fgets
	puts(str);
	printf("%d\n", strlen(str));
	fclose(fp1);

fscanf and fprintf

讀寫一段字符串

int fscanf ( FILE * stream, const char * format, ... );
int fprintf ( FILE * stream, const char * format, ... );

實例

	FILE* fp;
	if ((fp = fopen(argv[1], "a")) == NULL) {
		printf("Can't open %s file", argv[0]);
		exit(1);
	}

	char str[20];
	gets(str);
	fprintf(fp, "%s", str);				// fprintf接收空格符
	fclose(fp);

	FILE* fp1;
	char chs[30];
	fp1 = fopen(argv[1], "r");
	fscanf(fp1, "%s", chs);				// fscanf不接收空格符
	puts(chs);
	fclose(fp1);

fread and fwrite

讀寫所有的數據類型,不僅限於char

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );  // size指讀的數據類型大小,count指讀多少個
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream ); // 同fread

實例

// fread and fwrite
	FILE* fp;
	if ((fp = fopen(argv[1], "w")) == NULL) {
		printf("Can't open %s file", argv[0]);
		exit(1);
	}

	int a[] = {1,2,3,4,5};
	fwrite(a, sizeof(int), 4, fp);		// fwrite
	fclose(fp);

	FILE* fp1 = fopen(argv[1], "r");
	int num[10];
	fread(num, sizeof(int), 5, fp1);	// fread
	for (int i = 0; i < 5; i++) {
		printf("%d\n", num[i]);	// num[4]未初始化
	}
	fclose(fp1);

完整代碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main(int argc, char const *argv[])
{
	if (argc != 2) {
		printf("Usage: %s filename\n", argv[0]);
		exit(1);
	}

// getc and putc

	/*char ch;
	FILE* fp;	
	if ((fp = fopen(argv[1], "r+")) == NULL) {
		printf("Can't open %s\n", argv[1]);
		exit(1);
	}
	while ((ch = getc(fp)) != EOF) {	// getc
		putc(ch, stdout);				// putc
	}
	fclose(fp);
	*/


// fgets and fputs
	/*FILE* fp;

	if ((fp = fopen(argv[1], "w+")) == 	NULL) {
		printf("Can't open %s\n", argv[1]);
		exit(1);
	}

	char str[20];
	gets(str);
	fputs(str, fp);						// fputs
	fclose(fp);

	FILE *fp1= fopen(argv[1], "r");
	fgets(str, 8, fp1);					// fgets
	puts(str);
	printf("%d\n", strlen(str));
	fclose(fp1);
	*/

// fscanf and fprintf
	/*FILE* fp;
	if ((fp = fopen(argv[1], "a")) == NULL) {
		printf("Can't open %s file", argv[0]);
		exit(1);
	}

	char str[20];
	gets(str);
	fprintf(fp, "%s", str);				// fprintf接收空格符
	fclose(fp);

	FILE* fp1;
	char chs[30];
	fp1 = fopen(argv[1], "r");
	fscanf(fp1, "%s", chs);				// fscanf不接收空格符
	puts(chs);
	fclose(fp1);
*/


// fread and fwrite
	FILE* fp;
	if ((fp = fopen(argv[1], "w")) == NULL) {
		printf("Can't open %s file", argv[0]);
		exit(1);
	}

	int a[] = {1,2,3,4,5};
	fwrite(a, sizeof(int), 4, fp);		// fwrite
	fclose(fp);

	FILE* fp1 = fopen(argv[1], "r");
	int num[10];
	fread(num, sizeof(int), 5, fp1);	// fread
	for (int i = 0; i < 5; i++) {
		printf("%d\n", num[i]);	// num[4]未初始化
	}
	fclose(fp1);

	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章