利用C语言结构体模拟一个简单的JavaBean
利用C语言模拟一个Javabean
仅封装了,“无参构造函数”,“带参构造函数”,"toString方法"
#include <stdio.h>
struct User{
int ID;
char *name;
char *password;
int age;
};
void newUser(struct User *,const int ,const char *,const char *,const int);
void printUserInfo(struct User *);
void copyUser(struct User *,const struct User *);
int main(){
//char *p;
//printf("%d", sizeof(p));
//char p[10];
//strcpy(p, NULL); 不合法
//BasePart
struct User user1;
user1.ID = ;
char name1[] = "lifei";
//printf("%d\n", sizeof(name1));
user1.name = malloc(sizeof(name1));
printf("sizeof(user1.name): %d 个字节\n", sizeof(user1.name));//*user1.name 首地址就1个字节。
printf("user1.name占地: %d 个字节\n", strlen(user1.name));//为什么是24个字节呢,刚刚分配过来,就是有很大?
strcpy(user1.name, name1);
printf("sizeof(user1.name): %d 个字节\n", sizeof(user1.name));//*user1.name 首地址就1个字节。
printf("user1.name占地: %d 个字节\n", strlen(user1.name));//这里就比较好,结果是5
char password1[] = "";
user1.password = malloc(sizeof(password1));
strcpy(user1.password, password1);
user1.age = ;
printUserInfo(&user1);
//printf(user1.name);
/*printf("%s\n", user1.name);
printf("%p\n", user1.name);
printf("%d\n",sizeof(user1.name));*/
//struct User user2;
//user2 = user1;//因为不面向对象,所以不可能点出来,所以 要传递两个对象进去对嘛
//user2.ID = 3;
//strcpy(user1.name, "rio");//这里越界有个异常,最好自己写个啥,然后就按之前视频里演示的那样,新来谁,就把谁创建,再赋值进去。TODO
//printUserInfo(&user2);
//printUserInfo(&user1);
//这种修改 肯定不行,仅年龄跟id改了,但是姓名跟密码是一起改的,所以,姓名跟密码要指定新的位置。
struct User user2;
copyUser(&user2, &user1);//以上两句话相当于 :User user2 = new User(user1);
strcpy(user1.name, "rio");
user2.ID = ;
printUserInfo(&user2);//相当于toString();还是重载过的
printUserInfo(&user1);
struct User user3;
newUser(&user3, ,"reeven", "qwerty", );//以上两句话,相当于 User user3 = new User(3,"reeven", "qwerty", 28);
printUserInfo(&user3);
free(user1.name);
free(user1.password);
free(user2.name);
free(user2.password);
free(user3.name);
free(user3.password);
getchar();
return ;
}
void copyUser(struct User *dest, const struct User *src){
dest->ID = src->ID;
//printf("%s\n", src->name);
//printf("%d\n", sizeof(src->name));
//printf("%d\n", sizeof(*(src->name)));
dest->name = malloc(strlen(src->name)+);//+1表示\0
if (src->name != NULL){
strcpy(dest->name, src->name);
}
dest->password = malloc(strlen(src->password) + );
if (src->password != NULL){
strcpy(dest->password, src->password);
}
dest->age = src->age;
}
void printUserInfo(const struct User *user){
printf("用户信息:id:%d,用户名:%s,密码:%s,年龄:%d\n", user->ID, user->name, user->password, user->age);
}
/**
相当于构造函数了。。。
*/
void newUser(struct User *user,const int id, const char *name, const char *password,const int age){
user->ID = id;
user->name = malloc(strlen(name) + );
if (name != NULL){
strcpy(user->name, name);
}
user->password = malloc(strlen(password) + );
if (password != NULL){
strcpy(user->password, password);
}
user->age = age;
}
利用C语言结构体模拟一个简单的JavaBean的更多相关文章
- 利用JSP编程技术实现一个简单的购物车程序
实验二 JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP ...
- PHP5实现foreach语言结构遍历一个类的实例
PHP5实现foreach语言结构遍历一个类 创建一个类集成Iterator接口,并实现Iterator里面的方法即可,下面见实例代码实现 <?php class Test implements ...
- 利用angular4和nodejs-express构建一个简单的网站(五)—用户的注册和登录-HttpClient
上一节简单介绍了一下利用angular构建的主路由模块,根据上一节的介绍,主页面加载时直接跳转到用户管理界面,下面就来介绍一下用户管理模块.启动应用后,初始界面应该是这样的: 用户管理模块(users ...
- 利用VisualStudio单元测试框架举一个简单的单元测试例子
本随笔很简单,不涉及mock和stub对象,而是只给出一个简单的利用Visual Studio单元测试框架的最简单例子.如果需要深入理解Unit Test的原理与艺术,请参考<The art o ...
- 利用SpringBoot+Logback手写一个简单的链路追踪
目录 一.实现原理 二.代码实战 三.测试 最近线上排查问题时候,发现请求太多导致日志错综复杂,没办法把用户在一次或多次请求的日志关联在一起,所以就利用SpringBoot+Logback手写了一个简 ...
- C语言入门教程: 一个简单的实例
对于学习要保持敬畏! 语言不只是一种工具,还是一种资源,因此,善待它,掌握它! 我们知道,对于未知通常都会充满好奇和畏惧,既想了解它,又害怕神秘面纱隐藏的不确定性.对于一门编程语言同样如此,我将以 ...
- (二)如何利用C# Roslyn编译器写一个简单的代码提示/错误检查?
上一篇我们讲了如何建立一个简单的Roslyn分析项目如分析检查我们的代码. 今天我们主要介绍各个项目中具体的作用以及可视化分析工具. 还是这种截图,可以看到解决方案下一共有三个项目. Analyzer ...
- C语言多线程的一个简单例子
多线程的一个简单例子: #include <stdio.h> #include <stdlib.h> #include <string.h> #include &l ...
- 如何利用C# Roslyn编译器写一个简单的代码提示/错误检查?
OK, 废话不多说,这些天在写C#代码时突然对于IDE提示有了一些想法,之前也有了解过,不过并没有深入. 先看个截图: 一段再简单不过的代码了,大家注意看到 count 字段下面的绿色波浪线了吗,我们 ...
随机推荐
- HDU 4009 Transfer water 最小树形图
分析:建一个远点,往每个点连建井的价值(单向边),其它输水线按照题意建单向边 然后以源点为根的权值最小的有向树就是答案,套最小树形图模板 #include <iostream> #incl ...
- uva 11168
题意:给出平面上的n个点,求一条直线,使得所有点在该直线的同一侧且所有点到该直线的距离和最小,输出该距离和. 思路:要使所有点在该直线的同一侧,明显是直接利用凸包的边更优.所以枚举凸包的没条边,然后求 ...
- use tomcat to access the file cross the environment
background: 项目中的一个小工具,是一个Cron Job ,每天去搜集下服务器Hadoop Job的运行状态,并生成一份报告发送给整个Team,生产报告的同时把相关的日志文件保存到固定的一台 ...
- Spark系列(三)SparkContext分析
SparkContext初始化流程图 其它说明: 在createTaskScheduler会根据不同的提交模式创建backend对象(如本地模式为LocalBackend). 在SparkDeploy ...
- 让一个WebRole支持多个站点
在参考Configure a Web Role for Multiple Web Sites和Tips for Publishing Multiple Sites in a Web Role两篇文章后 ...
- 安装禅道项目管理软件ZenTaoPMS
服务器Ubuntu 13.04 且安装了上一篇随笔中的 AMP本文略去安装AMP过程.版本号满足要求(php>5.2 and mysql.2) 1.官网http://www.zentao.net ...
- 垃圾回收(GC)的三种基本方式
垃圾(Garbage)就是程序需要回收的对象,如果一个对象不在被直接或间接地引用,那么这个对象就成为了「垃圾」,它占用的内存需要及时地释放,否则就会引起「内存泄露」.有些语言需要程序员来手动释放内存( ...
- homework-02 一坑到底的最大和联通图
你在这个作业中学到了什么? 有什么好的设计值得分享? 感想如何 (太容易 / 太难 / 太无趣)? 我觉得这套题目有点偏难,我不像大牛那样,有很多算法可以选择,我是0算法基础的,所以遇到这题我一个 ...
- JS 计算日期天数差
function dayDiffer(startDate,endDate){ console.info((endDate.getTime - startDate.getTime())/(24*60*6 ...
- hdoj 1234 开门人和关门人
开门人和关门人 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) #include ...