strdup的使用技巧

1、我们经常使用的一个对临时字符串的分配如下:

Stu CreateStudent(char *student_name)
{
	Stu s = (Stu)malloc(sizeof(Student));
	s->age = 99;
	s->name = (char *)malloc(strlen(student_name) + 1);
	strcpy(s->name, student_name);
	
	return s;
}



2、其实里面的这两句,完全可以使用strdup这个函数来代替

下面是完整的例子,和上面使用字符串分配+strcpy一样的结果

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
 
 
typedef struct Student
{
	int age;
	char *name;
}*Stu, Student;
 
//typedef Student* stu;
 
 
Stu CreateStudent(char *student_name)
{
	Stu s = (Stu)malloc(sizeof(Student));
	s->age = 99;
	s->name = _strdup(student_name);
 
	return s;
}
 
 
int main()
{
	Stu point_studen;
	point_studen = CreateStudent("zengraoli");
 
 
	printf("student age is : %d, student name is : %s\n", point_studen->age, point_studen->name);
 
	if (point_studen)
	{
		free(point_studen->name);
		free(point_studen);
		point_studen = NULL;
	}
	
 
	return 0;
}



3、strdup的一些描述

1)strdup()函数计算出字符串的长度,然后调用malloc()函数在堆上分配相应的空间

2)然后strdup()函数把所有字符复制到堆上的新空间

 

也就是说,strdup()总是在堆上创建空间,而不是在栈上,因为栈用来保存局部变量,而局部变量很快就会被清除

 

因为strdup()函数把新字符串放在堆上,所以最后需要释放对应的字符串.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值