利用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 字段下面的绿色波浪线了吗,我们 ...
随机推荐
- Amoeba搞定mysql主从读写分离
前言:一直想找一个工具,能很好的实现mysql主从的读写分离架构,曾经试用过mysql-proxy发现lua用起来很不爽,尤其是不懂lua脚本,突然发现了Amoeba这个项目,试用了下,感觉还不错,写 ...
- UMDF
看了一周的UMDF,今天就将这些天的心得记下来. 一开始,老大推荐看<竹林蹊径:深入浅出Windows驱动开发完美补全版.张佩马勇董鉴源.扫描版>.这本书看了前三章,这本书讲的太细,作者又 ...
- HDU 4825-Xor Sum(trie)
题意: 给你一组数,开始询问给一个数 求组中与该数异或值最大的数. 分析:根据异或的特点 要想得到的异或值最大 尽可能的让两个数的每位都相反 先把给定的一组数建树,数的最后一位对应的节点保存这个数的 ...
- linux操作系统cp命令
- 不适用临时空间,交换变量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 ...
- 问题-File not "controls.res"(XE2+Win7虚拟机)
问题现象:我在Win7的虚拟机中安装XE2,前提是原来的系统上有D2007,安装后,新建个工程,F9报"File not controls.res".百思不得其解. 问题原因:因为 ...
- light oj 1214 - Large Division
1214 - Large Division PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit: 32 MB G ...
- CSS层叠样式选择器归纳
常用选择器 1.1 类型选择器:用来寻找特定类型的元素 标签 { 声明 } p { color:black; } h1 { font-weight:bold; } 1.2 后代选择器: 选择一个元 ...
- 8000401a 错误及解决办法
将web程序部署到服务器上时,偶尔会遇到下面的错误: System.Runtime.InteropServices.COMException (0x8000401A): 检索 COM 类工厂中 CLS ...
- 自己写一个与startWith类似的判断方法
package com.hanqi.lianxi; import java.util.Scanner; public class startWith { //自己顶一个与startWit ...