内存堆分配操作函数的使用(realloc,malloc等)

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不初始化,里边数据是随机的垃圾数据。

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. 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);



内存堆分配操作函数的使用(realloc,malloc等)

上一篇:app端查看单张拍照图片的功能


下一篇:iOS开发-strong, weak区别