利用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. Amoeba搞定mysql主从读写分离

    前言:一直想找一个工具,能很好的实现mysql主从的读写分离架构,曾经试用过mysql-proxy发现lua用起来很不爽,尤其是不懂lua脚本,突然发现了Amoeba这个项目,试用了下,感觉还不错,写 ...

  2. UMDF

    看了一周的UMDF,今天就将这些天的心得记下来. 一开始,老大推荐看<竹林蹊径:深入浅出Windows驱动开发完美补全版.张佩马勇董鉴源.扫描版>.这本书看了前三章,这本书讲的太细,作者又 ...

  3. HDU 4825-Xor Sum(trie)

    题意: 给你一组数,开始询问给一个数  求组中与该数异或值最大的数. 分析:根据异或的特点 要想得到的异或值最大 尽可能的让两个数的每位都相反 先把给定的一组数建树,数的最后一位对应的节点保存这个数的 ...

  4. linux操作系统cp命令

  5. 不适用临时空间,交换变量a和b

    方法1: a = a + b; b = a - b; a = a - b; 方法2: a ^= b; b ^= a; a ^= b; 方法3: a = a * b; b = a / b; a = a  ...

  6. 问题-File not "controls.res"(XE2+Win7虚拟机)

    问题现象:我在Win7的虚拟机中安装XE2,前提是原来的系统上有D2007,安装后,新建个工程,F9报"File not controls.res".百思不得其解. 问题原因:因为 ...

  7. light oj 1214 - Large Division

    1214 - Large Division   PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit: 32 MB G ...

  8. CSS层叠样式选择器归纳

     常用选择器 1.1 类型选择器:用来寻找特定类型的元素  标签 { 声明 } p { color:black; } h1 { font-weight:bold; } 1.2 后代选择器: 选择一个元 ...

  9. 8000401a 错误及解决办法

    将web程序部署到服务器上时,偶尔会遇到下面的错误: System.Runtime.InteropServices.COMException (0x8000401A): 检索 COM 类工厂中 CLS ...

  10. 自己写一个与startWith类似的判断方法

    package com.hanqi.lianxi; import java.util.Scanner; public class startWith {        //自己顶一个与startWit ...