cchar.c

来自「即时计算加法」· C语言 代码 · 共 71 行

C
71
字号
/*
  Name:cchar.c
  Copyright:
  Author:
  Date: 17-11-08 23:56
  Description:cchar类的成员函数的定义
*/

#include "includes.h"

#define CC_SIZE 50 //定义单位域的长度

/*
  Function Name:CCharCreater
  Author: 
  Description:用于创建一个CChar类的对象并且初始化
*/

CChar * CCharCreater( void )//此函数只在申请新的空间时调用
{
	CChar * cchar_ = NULL;//头节点并初始化
	char * Temp;//临时变量
	cchar_ = ( CChar * ) malloc ( sizeof ( CChar ));//分配空间
	Temp = ( char * ) malloc (( sizeof ( char )) * CC_SIZE );//给临时变量分配空间
	if ( (Temp == NULL ) || ( cchar_ == NULL ))
	{
		Error ( E_OVER_MEM );
	}
	else
	{
		* Temp = 0;//初始化为0,数据安全性,但此处操作是否适当尚待讨论
		//!!!!!!!!!!!!!!
		//!!!!!!!!!!!!!!
		//!!问题代码!!问题代码!!
		//!!!!!!!!!!!!!!
		cchar_ -> calchar = Temp;//将临时变量的域定向到CLine
		Temp = NULL;//将Temp置空
		cchar_ -> CCharLen = CC_SIZE;//当前小节的长度,用于扩展
		return cchar_;//返回头节点
	}
}

/*
  Function Name:CCharExpand
  Author: 
  Description:用于扩展calchar域,原理与LinerExpand相同
*/

void CCharExpand ( CChar * Old )
{
	int i;
	char * Temp = NULL;
	Temp = ( char * ) malloc (( CC_SIZE + ( Old -> CCharLen )) * sizeof ( char ));
	//扩展calchar域的大小
	if ( Temp == NULL )
	{
		Error ( E_OVER_MEM );//内存不足时的处理
	}
	else
	{
		//此处应该先将旧的表达式复制到新的内存中,然后重定向指针
		for ( i = 0 ; i < (( Old -> CCharLen ) - CC_SIZE ) ; ++i )
		{
			*( Temp + i ) = *( Old -> calchar );//旧空间内容复制到新空间
		}
		free ( Old -> calchar );//重定向到CLine
		Old -> calchar = Temp;
		Temp = NULL;//将NULL置空
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?