C语言20

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

//栈 stack  FIOL
#define FALSE -1
typedef struct Node
{
	int value;
	struct Node* pNext;

}Stack;

void S_Push(Stack** ppTop,int n)
{
	Stack* pTemp = (Stack*)malloc(sizeof(Stack));

	pTemp->value = n;
	pTemp->pNext = NULL;
	/*if (*ppTop == NULL || ppTop == NULL)
	{
		*ppTop = pTemp;
		
	}
	else
	{*/
		pTemp->pNext = *ppTop;
		*ppTop = pTemp;
		//因为重复 且当*ppTop为空时 与其无异 故仅两行代码足够
	//}



	return pTemp;
}
int S_Pop(Stack**ppTop)
{
	if (*ppTop == NULL || ppTop == NULL)
	{
		return FALSE;
	}

	Stack* pMark = NULL;
	pMark = *ppTop;
	*ppTop = (*ppTop)->pNext;
	int value;

	value = pMark->value;
	free(pMark);
	pMark = NULL;
	return value;
}
int main()
{
	Stack* pTop = NULL;

	S_Push(&pTop,1);
	S_Push(&pTop, 2);
	S_Push(&pTop, 3);
	S_Push(&pTop, 4);

	printf("%d\n",S_Pop(&pTop));
	printf("%d\n", S_Pop(&pTop));
	printf("%d\n", S_Pop(&pTop));
	printf("%d\n", S_Pop(&pTop));




	return 0;
}

当函数执行赋参的时候 顺序是由右向左

联合体

#include<stdio.h>
union AA
{
	int a;
	short b;
	char c;
};
//所有成员共享一块空间 大小取决于最大的成员

int main()
{
	union AA a;
	printf("%d\n",sizeof(a));

	a.a = 1;
	printf("");

	return 0;
}

文件

#include<stdio.h>


int main()
{
	FILE* pFile = NULL;
	fopen_s(&pFile, "D:\\111.txt", "r+");
	//在字符串作为路径出现的时候 把所有的\都补成\\
	
	char buf[1024] = { 0 }; 
	size_t n;//size_t 是无符号整型的别名
	n = fread(buf,1,4,pFile);
	printf("%s\n", buf);
	printf("%d\n", n);

	fseek(pFile,1,SEEK_CUR);

	fwrite("12345",1,5,pFile);

	fclose(pFile);
	return 0;
}

文件分为 磁盘文件 和 设备文件

磁盘文件:指一组相关数据的有序集合,通常存储在外部介质(如磁盘),使用时才调入内存。

设备文件:在操纵系统中把每一个与主机相连的输入、输出设备看作是一个文件,把它们的输入、输出等同于对磁盘文件的读和写。

磁盘文件分为:文本文件 和 二进制文件

区分:用记事本打开 能看懂 文本文件 看不懂 二进制文件

文件打开

任何文件使用之前必须打开

fopen_s(文件指针,路径+打开文件的模式设置);

打开模式含义
r或rb以只读方式打开一个文本文件(不创建文件)
w或wb以只写方式打开文件(如果文件存在则清空文件,文件不存在则创建一个文件)
a或ab以追加方式打开文件,在末尾添加内容,若文件不存在则创建文件
r+或rb+以可读、可写的方式打开文件(不创建新文件)
w+或wb+以可读、可写的方式打开文件(如果文件存在则清空文件,文件不存在则创建一个文件)
a+或ab+以添加方式打开文件,打开文件并在末尾更改文件,若文件不存在则创建文件

注:用typora写表格 可以用 CTRL+T 方便快捷

成功返回文件指针

失败返回NULL

fclose(pFile);

操作文件

读文件 : fread(存放读取出来数据的内存空间,size指定读取文件块数的大小,nmemb读取文件块数 总大小为:size*nmemb,已打开的文件指针);

size为1 nmemb 为存放数据的内存空间的大小

返回值:

成功:返回实际读满的块数,如果比nmemb小,但大于0,说明读到文章的结尾

失败:0

EOF标记 代替-1 即文件的结尾

r+ w+ a+ 访问类型时,将同时启用读取和写入 但是,但当你从读取切换到写入时,输入操作符必须遇到EOF标记,如果没有EOF,必须使用对文件定位函数的干预调用,文件定位函数是 fsetpos,fseek,rewind,从写入切换到读取时,必须使用对fflush或文件定位函数的干预调用

fseek(文件指针,偏移的字节数(有正负),从哪个位置去偏移(SEEK_CUR(当前位置),SEEK_END(结尾位置),SEEK_SET(开头位置)));

fseek如果成功,则该函数返回零,否则返回非零值。

fwrite () 函数的返回值是成**功写入的数组成员的数量(**注意不是字节数)。

文本文件复制

#include<stdio.h>



int main()
{
	FILE* pFile1 = NULL;
	FILE* pFile2 = NULL;
	char c;
	fopen_s(&pFile1,"D:\\111.txt", "r");

	fopen_s(&pFile2, "D:\\222.txt", "w");

	while ((c=fgetc(pFile1)) != EOF)
	{
		fputc(c,pFile2);
	}

	fclose(pFile2);

	fclose(pFile1);


	return 0;
}

fgetc()返回一个字符

在文件内部有一个位置指针,用来指向当前读写到的位置,也就是读写到第几个字节。在文件打开时,该指针总是指向文件的第一个字节。使用 fgetc() 函数后,该指针会向后移动一个字节,所以可以连续多次使用 fgetc() 读取多个字符。

二进制文件复制

#include<stdio.h>

int main()
{
	FILE* pFile1 = NULL;
	FILE* pFile2 = NULL;
	char buf[1024];
	size_t nRead, nWrite;

	fopen_s(&pFile1,"C:\\Users\\ctn\\Desktop\\新建 DOCX 文档.docx", "rb");
	fopen_s(&pFile2,"D:\\22212.docx","wb");

	while ((nRead = fread(buf,1,1024,pFile1))>0)
	{
		nWrite = fwrite(buf,1,nRead,pFile2);
		//读多少写多少
		printf("read %d  write %d\n",nRead,nWrite);
	}
	
	fclose(pFile1);
	fclose(pFile2);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值