C语言IO函数总结

一.只用于标准输入(stdin)和标准输出(stdout)的函数

1.getchar putchar

2.gets puts

  1. gets:从标准输入读字符。直到出现换行符或读到文件结尾为止。不会检测空间是否足够,会造成空间越界。
  2. puts:向标准输出设备输出一个字符串,会自动添加换行符
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
int main(int argc, char *argv[])
{
	char arr[8] = "";
	int len = sizeof(arr) / sizeof(arr[0]);

	printf("请输入小于%d个字符的字符串:\n", len);
	gets(arr);//运行时会出现断错误

	system("pause");
	return 0;
}

3.sanf printf

  1. sanf:遇到空格、回车、tab键都会结束输入。即不提取后面继续输入的字符。

4.sscanf sprintf

scanf:解包

  1. 遇到空格、回车、\0、\t、\v、\f。均结束提取(简单地说就是空白字符与\0都会结束sscanf的提取)。
  2. sscanf(buf, "%c3%c", &ch1, &ch2); buf与format字符串中有匹配项可以跳过,比如3。
  3. 跳过数据:%*d %*s
  4. 指定提取宽度:%3s  %*2s
  5. 指定提取范围:[a~zA~Z0~9] [aBc]
  6. 取反%[^a] 

sprintf:组包

  1. 格式化字符串
  2. 字符串连接
  3. 把数字转成字符串
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include

int main(int argc, char *argv[])
{
	//注意:xx个数并没有限制
	printf("请输入一个格式为123456@xiao_ming.com的邮箱:");
	char arr[64] = "";
	scanf("%s", arr);
	char msg[32] = "";
	//sscanf(arr, "%*[^@]@%[^.]", msg);
	//sscanf(arr, "%*[^@]%*[@]%[^.]", msg);
	//sscanf(arr, "%*[^@]%*[@]%s%[^.]", msg);
	sscanf(arr, "%*[^@]%*[@]%s.", msg);

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

	system("pause");
	return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include

int main(int argc, char *argv[])
{
        //格式化字符串
        char arr[32] = "";
        sprintf(arr, "%s%s", "我是xiao_ming", " 今年17岁");

	//连接字符串
	char src[32] = "hello";
	char dst[32] = " world";
	sprintf(dst, src);
	printf("%s\n", dst);

	//把数字转成字符串
	char buf[32] = "";
	sprintf(buf, "%d", 1000);
	printf("%s\n", buf);

	system("pause");
	return 0;
}

二.可用于所有流的输入输出函数

1.fgetc(getc)    fputc(putc)
2.fgets         fputs
3.fprintf        fscanf
4.fread         fwrite

int main(int argc, char *argv[])
{
	FILE *fp = fopen("C:/Users/lenovo/Desktop/PETool 1.0.0.5.exe","r+"); 
	if (!fp) { printf("fopenError"); return;} 
	
	int c = fgetc(fp);
	printf("%c\n", (char)c);
	printf("fgetc之后%p\n", fp); //证明此函数不会改变SEEK位置
	
	char arr[2] = { 0 };
	fgets(arr, 2, fp);
	printf("%s\n", arr);
	printf("fgets之后%p\n", fp);

	fseek(fp, 16 * 4, SEEK_SET);
	int num = 0;
	if ((num = fprintf(fp, "Hell%cWorld", 'c')) < 0) {
		printf("fseekError");
	}
	else {
		printf("%d\n", num);
	}

	char a[64] = { 0 };
	//int a = fread(fp, sizeof(char), 12, "HelloTencen"); //最后一个参数必须是FILE*类型否则会报错
	fseek(fp, -10, SEEK_CUR);
	//fread(a, sizeof(char), 12, (FILE*)"HelloTencen");
	fread(a, sizeof(char), 10, fp);
	printf("%s\n", a);

	if (fclose(fp)) { printf("fcloseError");return; }



	system("pause");
	return 0;
}

 注意:Win下路径有两种书写方式:\ 和 /

但是\是转义字符的意思,\本身也需要转义,所以在书写时写为\\。

三.文件的打开和关闭

  1. FILE *fp = fopen("file_name", "mode"); 成功返回文件指针,失败返回NULL。
  2. int fclose(FILE* stream); 成功返回0,失败返回-1。

打开模式

含义

r或rb

以只读方式打开一个文本文件(不创建文件,若文件不存在则报错)

w或wb

以写方式打开文件(如果文件存在则清空文件,文件不存在则创建一个文件)

a或ab

以追加方式打开文件,在末尾添加内容,若文件不存在则创建文件

r+或rb+

以可读、可写的方式打开文件(不创建新文件)

w+或wb+

以可读、可写的方式打开文件(如果文件存在则清空文件,文件不存在则创建一个文件)

a+或ab+

以添加方式打开文件,打开文件并在末尾更改文件,若文件不存在则创建文件

注意:b表示二进制模式,二进制模式只在window下有效,在linux中是无效的。linux下所有的文本文件都以\n结尾。在window下二进制读取模式时可以获得\r\n。

四.文件的随机(指定位置)读取

  1. 移动文件流指针:int fseek(FILE* stream, long offset, int whence); 开始:SEEK_SET   当前位置:SEEK_CUR   文件末尾:SEEK_END
  2. 获取流指针的位置:long ftell(FILE* stream);
  3. 将流指针移到文件开头:void rewind(FILE* stream);

 

 

 

你可能感兴趣的:(C语言)