利用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 = 1;
        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[] = "123456";
        user1.password = malloc(sizeof(password1));
        strcpy(user1.password, password1);
        user1.age = 24;
        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 = 2;

    printUserInfo(&user2);//相当于toString();还是重载过的
    printUserInfo(&user1);

    struct User user3;
    newUser(&user3, 3,"reeven", "qwerty", 28);//以上两句话,相当于 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 0;

}

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);//+1表示\0
    if (src->name != NULL){
        strcpy(dest->name, src->name);
    }
    dest->password = malloc(strlen(src->password) + 1);
    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) + 1);
    if (name != NULL){
        strcpy(user->name, name);
    }
    user->password = malloc(strlen(password) + 1);
    if (password != NULL){
        strcpy(user->password, password);
    }
    user->age = age;

}
时间: 2024-12-24 18:19:56

利用C语言结构体模拟一个简单的JavaBean的相关文章

利用java的Socket实现一个简单hello/hi聊天程序

利用java的Socket实现一个简单hello/hi聊天程序 首先,我们来用java实现一个简单的hello/hi聊天程序.在这个程序里,我学习到了怎么用socket套接套接字来进行编程.简单理解了一些关于socket套接字和底层调用的关系.关于java的封装思想,我学会了一些东西,java里真的是万物皆对象.还学到了一点多线程的知识. TCP 在这里,不得不先介绍以下TCP.TCP是传输层面向连接的协议.提供了端到端的进程之间的通信方式.TCP在通信之前要先建立连接.这里我们称这个建立连接的

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

实验二   JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP中数据库编程方法: 二.实验要求 : 利用JSP编程技术实现一个简单的购物车程序,具体要求如下. (1)用JSP编写一个登录页面,登录信息中有用户名和密码,分别用两个按钮来提交和重置登录信息. (2)编写一个JSP程序来处理用户提交的登录信息,如果用户名为本小组成员的名字且密码为对应的学号时,采用J

利用KBEngine +U3D 做的一个简单MMO手游Demo

利用KBE +U3D 做的一个简单MMO手游Demo目前只完成到一个普通攻击和一个火球术,  火球术需要点击怪物后才能释放.点击npc后会跳到一个副本.里面有一只半兽人. 欢迎大家来试玩 并提出宝贵意见.http://pan.baidu.com/s/1dDtVjnb 感谢kbe 一直以来的帮助.

利用servlet和html写一个简单的登录

写一个简单的html登录页面,然后利用servlet来进行验证账号密码. html代码: <!DOCTYPE html> <html> <title>登陆页面</title> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action = &

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

目录 一.实现原理 二.代码实战 三.测试 最近线上排查问题时候,发现请求太多导致日志错综复杂,没办法把用户在一次或多次请求的日志关联在一起,所以就利用SpringBoot+Logback手写了一个简单的链路追踪,下面详细介绍下. 一.实现原理 Spring Boot默认使用LogBack日志系统,并且已经引入了相关的jar包,所以我们无需任何配置便可以使用LogBack打印日志. MDC(Mapped Diagnostic Context,映射调试上下文)是log4j和logback提供的一种

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

多线程的一个简单例子: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <pthread.h> void * print_a(void *); void * print_b(void *); int main(){ pthread_t t0; pthread_t t1; // 创建线程A if(pthread_creat

利用Hessian10分钟配置出一个简单的跨Web服务消息推送

笔者,之前对Web跨服务推送数据一无所知,今天研究了一下.其实有些事物,在不理解的时候完全觉得好似天外来物.但了解一点点之后,又会觉得十分有趣.每天闲扯一下很开心,下面一个简单的实例10分钟配置出跨Web服务的消息推送.一.被调用端web.xml配置 <!--HelloHessian --> <servlet> <servlet-name>HelloHessian</servlet-name> <servlet-class>com.caucho.

利用JS跨域做一个简单的页面访问统计系统

其实在大部分互联网web产品中,我们通常会用百度统计或者谷歌统计分析系统,通过在程序中引入特定的JS脚本,然后便可以在这些统计系统中看到自己网站页面具体的访问情况.但是有些时候,由于一些特殊情况,我们需要自己来设计统计系统.由于前段时间公司的业务需求,我也是自己尝试了下,本文提供的是一个基本思路,统计系统也比较简单. 几个基本统计需求: 1.统计web每个页面用户访问量 2.统计用户访问者的和IP地址信息 3.页面之间的跳转情况 4.访问高峰时间段 服务器结构: 数据库表设计: 以上只是我简单列

C语言学习_一个简单程序的解释与C学习方法概括

简单计算器程序示例: 1 # include <stdio.h> //1.头文件 2 3 //2.加法函数 4 int add(int a,int b)//3.函数定义方式 5 { //4.函数体 6 return a+b; //5.函数返回 7 } 8 //减法 9 int move(int a,int b) 10 { 11 return a-b; 12 } 13 14 //乘法 15 int mul(int a,int b) 16 { 17 return a*b; 18 } 19 20 /