指针名=(数据类型*)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);