利用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; }