【C实现简易内存数据库】4、create实现

本文探讨了在C实现简易内存数据库时遇到的问题,特别是在`create`功能的实现过程中。当在函数`createTable`内部声明并初始化Table结构体t后,由于函数执行完毕,t所占内存被释放,导致全局变量tableHead保存的t地址失效。为解决这个问题,文章建议在main函数中声明t,并传递t的指针给`createTable`,以确保对同一对象进行操作,避免数据丢失。
摘要由CSDN通过智能技术生成

需要在C盘根目录下有create.txt和create2.txt方可运行。

如:create1.txt

create table Student     
(     
  id float(4) NOT NULL;     
  name char(100) NULL;     
  grade float(4) NULL;     
)     
create2.txt

create table Student2 
(     
  id2 float(4) NOT NULL;     
  name2 char(100) NULL;     
  grade2 float(4) NULL;     
)     


代码很大一部分是直接照搬了老师的博客: http://orangegao-gmail-com.iteye.com/
完整源码:

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

enum DataType {floatType, stringType};   
struct Row {
	void** data;
	Row* next;
};
struct Column {
	DataType type;
	int length;
	bool allowNull;
	char name[256];
	Column* next;
};
struct Table{
	char name[256];
	Row* rowHead;
	Column* columnHead;
	int columnCount;
	Table* next;
};

Table* tableHead;

int createTable(char*,Table*);
int getLength(char*);
int getColumnTypeLength(char* , DataType* , int*);

int main(){
	Table* t = (Table *)malloc(sizeof(Table));
	memset(t, 0, sizeof(Table)); 
	char* path;
	path = "C://create.txt";
	createTable(path,t);

	t = (Table *)malloc(sizeof(Table));
	memset(t, 0, sizeof(Table)); 
	path = "C://create2.txt";
	createTable(path,t);

	//test
	printf(&#
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值