内存堆分配操作函数的使用(realloc,malloc等)
来源:互联网 发布:淘宝网鼠标垫 编辑:程序博客网 时间:2024/05/16 01:03
1.realloc原型是extern void *realloc(void *mem_address, unsigned int newsize);,
指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。新的大小一定要大于原来的大小,不然的话会导致数据丢失!
如:int *pn=(int *)malloc(5*sizeof(int));变更之后,pn=(int *)realloc(pn,10*sizeof(int));
2.malloc,原型:extern void *malloc(unsigned int num_bytes);分配长度为num_bytes字节的内存块,
Malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。
int *bob; bob = (int *) malloc( sizeof(int) );
3.calloc,函数原型:void *calloc(unsigned n, unsigned size); 在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。 char *str = NULL; str = (char*) calloc (10, sizeof(char));strcpy(str, "Hello");printf("String is %s\n", str);free(str);
跟malloc的区别:calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。
6.memcpy:void *memcpy(void *dest, const void *src, size_t n);从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
如:char *src="Golden Global View";char dest[20];memcpy(dest,src,( strlen(s)+1) );
strcpy和memcpy主要有以下3方面的区别。
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。新的大小一定要大于原来的大小,不然的话会导致数据丢失!
如:int *pn=(int *)malloc(5*sizeof(int));变更之后,pn=(int *)realloc(pn,10*sizeof(int));
2.malloc,原型:extern void *malloc(unsigned int num_bytes);分配长度为num_bytes字节的内存块,
Malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。
int *bob; bob = (int *) malloc( sizeof(int) );
3.calloc,函数原型:void *calloc(unsigned n, unsigned size); 在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。 char *str = NULL; str = (char*) calloc (10, sizeof(char));strcpy(str, "Hello");printf("String is %s\n", str);free(str);
跟malloc的区别:calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。
4.strcpy,原型声明:extern char *strcpy(char* dest, const char *src);功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
char
*
strcpy
(
char
*d,
const
char
*s)
{
char
*r=d;
while
((*d++=*s++));
return
r;
}
5.
strncpy函数,原型,char
*
strncpy
(
char
*dest,
char
*src,
size_t
num );
(c/c++)复制src中的内容(字符,数字、汉字....)到dest,复制多少由num的值决定,返回指向dest的指针。如果遇到null字符('\0'),且还没有到num个字符时,就用(num - n)(n是遇到null字符前已经有的非null字符个数)个null字符附加到destination。注意:并不是添加到destination的最后,而是紧跟着由source中复制而来的字符后面。如:
char
des[] =
"Hello,i am!"
;
char
source[] =
"abc\0def"
;
strncpy
(des,source,5);
此时,des区域是这样的:a,b,c,\0,\0,逗号,i,空格,a,m,! 注意:\0,\0并不是添加在!的后面。
6.memcpy:void *memcpy(void *dest, const void *src, size_t n);从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
如:char *src="Golden Global View";char dest[20];memcpy(dest,src,( strlen(s)+1) );
strcpy和memcpy主要有以下3方面的区别。
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy
7.memmove;原型:void *memmove( void* dest, void* src,count );由src所指内存区域复制count个字节到dest所指内存区域。
如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
char s[]="Golden Global View"; memmove(s,s+7,strlen(s)+1-7); printf("%s",s);
8.memset,void *memset(void *s, int ch, size_t n);将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法
8.memset,void *memset(void *s, int ch, size_t n);将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法
如果要把一个char a[20]清零,则 memset(a,0,20);
9. fputc,原型,int fputc (int n, File *fp),函数功能: 将字符ch写到文件指针fp所指向的文件的当前写指针的位置。
如:char
msg[] =
"Hello world"
;
f =
fopen
(
"myFile.txt"
,
"w"
);
for
(i=0;i <
strlen
(s);i++)
fputc
(s[i],f);
0 0
- 内存堆分配操作函数的使用(realloc,malloc等)
- malloc,calloc,realloc等内存分配函数区别
- malloc,calloc,realloc等内存分配函数区别
- malloc,calloc,realloc等内存分配函数区别
- malloc,calloc,realloc等内存分配函数区别
- malloc,calloc,realloc等内存分配函数区别
- malloc,calloc,realloc等内存分配函数区别
- malloc,calloc,realloc等内存分配函数区别
- malloc,calloc,realloc等内存分配函数区别
- malloc,calloc,realloc等内存分配函数区别
- malloc,calloc,realloc等内存分配函数区别
- malloc,calloc,realloc等内存分配函数区别
- malloc,calloc,realloc内存分配函数的区别
- malloc、calloc、realloc、alloca几个内存分配函数的区别
- 内存分配函数malloc、calloc、realloc的区别
- 内存分配函数:malloc/calloc/realloc的区别
- 内存分配函数:realloc、malloc、calloc不同
- 动态内存分配函数malloc,calloc,realloc
- JNI中javah命令的使用,生成.h的头文件
- profile 和 bashrc的区别
- Android关机流程源码分析
- webdriver热门博客
- Solutions: Using Mac OSX Terminal as an alternative to PuTTY
- 内存堆分配操作函数的使用(realloc,malloc等)
- 构建自己的Android代码托管服务器
- C指针原理(71)-C快速入门(5)
- UML图——用例图
- UDID替代方案
- rm: argument list too long 的处理方法
- Jenkins插件编写入门
- pycharm字体设置
- SpringSecurity3.X--验证码