237-238 malloc结构体和展示calloc初始化的效果

1.malloc结构体和展示calloc初始化的效果

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
	/* TO DO
	1. struct with malloc
	2. use calloc:
	a.with initailized value 0
	b.allocate memory
	*/
typedef struct character {
	char* name;
	bool rareClothes;
	int* level;// many levels in physical and mind for using calloc set to zero at the beginning
}cha;
cha* createCharacter(char* name, bool rare);
void freeCharacter(cha* character);
int main(main) {
	cha* magician = createCharacter("Lily", true);
	printf("magician: %s, %s, %d\n", magician->name, magician->rareClothes? "true" : "false", *(magician->level));
	freeCharacter(magician);
	return 0;
}
cha* createCharacter(char* name,bool rare) {
	
	cha* myCharacter = (cha*)malloc(sizeof(cha));
	if (myCharacter == NULL) {
		perror("falied to allocate the struct!");
		return NULL;
	}
	myCharacter->name = (char*)malloc((strlen(name) + 1) * sizeof(char));
	if (myCharacter->name ==NULL) {
		perror("falied to allocate the string");
		free(myCharacter);
		return NULL;
	}
	strcpy_s(myCharacter->name, strlen(name) + 1, name);

	myCharacter->level = (int*)calloc(1,sizeof(int));
	if (myCharacter->level == NULL) {
		perror("falied to calloc the level");
		free(myCharacter->name);
		free(myCharacter);
		return NULL;
	}
	myCharacter->rareClothes = rare;
	return myCharacter;
}
void freeCharacter(cha* character) {
	if (character != NULL) {
		free(character->name);
		free(character->level);
		free(character);
	}
}

output

magician: Lily, true, 0

F:\Project\C\Project10\x64\Debug\Project10.exe (process 1972) exited with code 0.
Press any key to close this window . . .

2.具体值

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
typedef struct character {
	char* name;
	bool rareClothes;
	int* level; many levels in physical and mind for using calloc set to zero at the beginning
}cha;
cha* createCharacter(char* name, bool rare, int* level);
void freeCharacter(cha* character);
int main(main) {
	//a number in littleBox,and the littleBox in myCharacter(magicain).
	//pass the address of littleBox to myCharacter(magicain)
	int littleBox = 7;
	cha* magician = createCharacter("Lily", true, &littleBox);
	printf("magician: %s, %s, %d\n", magician->name, magician->rareClothes? "true" : "false", *(magician->level));
	freeCharacter(magician);
	return 0;
}
cha* createCharacter(char* name,bool rare, int* level) {
	
	cha* myCharacter = (cha*)malloc(sizeof(cha));
	if (myCharacter == NULL) {
		perror("falied to allocate the struct!");
		return NULL;
	}
	myCharacter->name = (char*)malloc((strlen(name) + 1) * sizeof(char));
	if (myCharacter->name ==NULL) {
		perror("falied to allocate the string");
		free(myCharacter);
		return NULL;
	}
	strcpy_s(myCharacter->name, strlen(name) + 1, name);

	myCharacter->level = (int*)calloc(1,sizeof(int));
	if (myCharacter->level == NULL) {
		perror("falied to calloc the level");
		free(myCharacter->name);
		free(myCharacter);
		return NULL;
	}
	*(myCharacter->level) = *level;
	
	myCharacter->rareClothes = rare;
	return myCharacter;
}
void freeCharacter(cha* character) {
	if (character != NULL) {
		free(character->name);
		free(character->level);
		free(character);
	}
}

output

magician: Lily, true, 7

F:\Project\C\Project10\x64\Debug\Project10.exe (process 7092) exited with code 0.
Press any key to close this window . . .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值