利用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的更多相关文章

  1. 利用JSP编程技术实现一个简单的购物车程序

    实验二   JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP ...

  2. PHP5实现foreach语言结构遍历一个类的实例

    PHP5实现foreach语言结构遍历一个类 创建一个类集成Iterator接口,并实现Iterator里面的方法即可,下面见实例代码实现 <?php class Test implements ...

  3. 利用angular4和nodejs-express构建一个简单的网站(五)—用户的注册和登录-HttpClient

    上一节简单介绍了一下利用angular构建的主路由模块,根据上一节的介绍,主页面加载时直接跳转到用户管理界面,下面就来介绍一下用户管理模块.启动应用后,初始界面应该是这样的: 用户管理模块(users ...

  4. 利用VisualStudio单元测试框架举一个简单的单元测试例子

    本随笔很简单,不涉及mock和stub对象,而是只给出一个简单的利用Visual Studio单元测试框架的最简单例子.如果需要深入理解Unit Test的原理与艺术,请参考<The art o ...

  5. 利用SpringBoot+Logback手写一个简单的链路追踪

    目录 一.实现原理 二.代码实战 三.测试 最近线上排查问题时候,发现请求太多导致日志错综复杂,没办法把用户在一次或多次请求的日志关联在一起,所以就利用SpringBoot+Logback手写了一个简 ...

  6. C语言入门教程: 一个简单的实例

    对于学习要保持敬畏! 语言不只是一种工具,还是一种资源,因此,善待它,掌握它!   我们知道,对于未知通常都会充满好奇和畏惧,既想了解它,又害怕神秘面纱隐藏的不确定性.对于一门编程语言同样如此,我将以 ...

  7. (二)如何利用C# Roslyn编译器写一个简单的代码提示/错误检查?

    上一篇我们讲了如何建立一个简单的Roslyn分析项目如分析检查我们的代码. 今天我们主要介绍各个项目中具体的作用以及可视化分析工具. 还是这种截图,可以看到解决方案下一共有三个项目. Analyzer ...

  8. C语言多线程的一个简单例子

    多线程的一个简单例子: #include <stdio.h> #include <stdlib.h> #include <string.h> #include &l ...

  9. 如何利用C# Roslyn编译器写一个简单的代码提示/错误检查?

    OK, 废话不多说,这些天在写C#代码时突然对于IDE提示有了一些想法,之前也有了解过,不过并没有深入. 先看个截图: 一段再简单不过的代码了,大家注意看到 count 字段下面的绿色波浪线了吗,我们 ...

随机推荐

  1. 【JMeter】JMeter在linux下运行

    之前在用JMeter做性能测试时基本都用自己的笔记本电脑. 考虑到网络传输和占用系统资源情况时进行了以下分析: 1 在笔记本上,开始-cmd "ping 服务器",得到传输时间.在 ...

  2. HDU 4614-Vases and Flowers(线段树区间更新)

    题意: n个花瓶(0-n-1) 现有两个操作, 操作1 给a,f 从a位置开始向后连续插f个花(一个花瓶插一个)若当前花瓶有花则向后找,直到n-1位置如果还有多余的花则丢掉求查完花的第一和最后一个位置 ...

  3. Clone PDB from same CDB

    Clone PDB 用途: 1.用于测试,从生产系统clone数据来进行测试 2.诊断性能问题   Clone PDB Using OMF from same CDB 环境信息: DB Version ...

  4. 【译】 AWK教程指南 6在AWK程序中使用Shell命令

    awk程序中允许调用Shell指令,并提供管道解决awk与系统间数据传递的问题.所以awk很容易使用系统资源,读者可利用这个特点来编写某些适用的系统工具. 范例:写一个awk程序来打印出线上人数. 将 ...

  5. mac中viso的兼容工具

    http://www.orsoon.com/Mac/77738.html破解教程 http://www.pc6.com/mac/111747.html下载地址 很强大,很爽.

  6. 洛谷 P1156 垃圾陷阱

    2016-05-31 09:54:03 题目链接 :洛谷 P1156 垃圾陷阱 题目大意: 奶牛掉坑里了,给定坑的深度和方块的个数,每个方块都可以垫脚或者吃掉维持生命(初始为10) 若可以出来,求奶牛 ...

  7. [iOS基础控件 - 6.7] 微博展示 使用代码自定义TableCell(动态尺寸)

    A.需求 1.类似于微博内容的展示 2.头像 3.名字 4.会员标志 5.内容 6.分割线 7.配图(可选,可有可无)   code source: https://github.com/hellov ...

  8. 笔记- iphone手机音频AAC视频H264推流(一) iphone手机推流最佳方案

    这几个月一直在做iphone手机音视频的东西,由于个人比较懒,所以一直没整理,现在闲的蛋疼,并且以后项目要搁置了,在这里记录一下我做的iphone手机推流的东西. 项目都是个人的调研与实验,可能很多不 ...

  9. WIN32不得不会:视频播放器

    我愿分享我所有的技术,你可愿意做我的朋友? ----赵大哥 为何要写这篇博客 纯WIN32API打造,自认为对底层的理解略有帮助,和大家分享成果和知识点. 已经实现功能有:打开.播放.关闭功能. 核心 ...

  10. PowerDesigner 物理数据模型(PDM)

    PowerDesigner 物理数据模型(PDM) 说明 数据库脚本sqldatabasegeneration存储   目录(?)[+]   一.     PDM 介绍 物理数据模型(Physical ...