<stdlib.h> 头文件中
1 void *calloc(int num, int size);
在内存中动态地分配 num 个长度为 size 的连续空间,并将每一个字节都初始化为 0。所以它的结果是分配了 num*size 个字节长度的内存空间,并且每个字节的值都是0。
2 void free(void *address);
该函数释放 address 所指向的内存块,释放的是动态分配的内存空间。
3 void *malloc(int num);
在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。
4 void *realloc(void *address, int newsize);
该函数重新分配内存,把内存扩展到 newsize。
注意:void * 类型表示未确定类型的指针。C、C++ 规定 void * 类型可以通过类型转换强制转换为任何其它类型的指针。
mem系列函数(memset memcpy memmove)
> memcpy、memset和memset三个函数在使用过程中,均需包含以下头文件:
//在C中 #include <string.h>
//在C++中 #include <cstring>
1. void memcpy ( void * dst,const void * src,size_t count)
memcpy函数是C/C++中的内存拷贝函数,它的功能是从源src所指的内存地址的起始位置开始,拷贝n个字节到目标dst所指的内存地址的起始位置中。
2. void memset(void *s, int c, size_t n)
memset一般用于对内存初始化,在这里需要注意的是,memset函数是对内存的每个字节(按字节)设置成c的值, 长度为n,存放在s所指向的起始地址。
3. void* memmove(void* dest, void* src, size_t count)
它与memcpy的功能相似,都是将src所指的n个字节复制到dst所指的内存地址的起始位置,不同的是它处理了src和dst有重叠的情况。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
str函数---字符串操作
1. strcpy
strcpy是C语言的标准库函数,使用strcpy需要包含以下头文件:
#include <string.h> #include <stdio.h> 其函数功能是把从src地址开始且含有NULL结束符的字符串复制到dst开始的地址空间,返回指向dst的指针。2. strncpy
char *strncpy(char *destin, char *source, int len);
功能:将source指向的len个字符串拷到destin3. strcat
char* strcat(char * str1,char * str2);
功能: 把字符串str2接到str1后面,str1最后的'\0'被取消4. strncat
char *strncat(char *dest, const char *src, size_t maxlen)
功能: 将字符串src中前maxlen个字符连接到dest中5. strcmp
int strcmp(char * str1,char * str2);
功能: 比较两个字符串str1,str2
返回: str1<str2,返回负数;str1=str2,返回 0;str1>str2,返回正数6. strncmp
int strncmp(char *str1,char *str2,int count)
功能: 对str1和str2中的前count个字符按字典顺序比较
返回: 小于0:str1<str2,等于0:str1=str2,大于0:str1>str27. strchr
char* strchr(char* str,char ch);
功能: 找出str指向的字符串中第一次出现字符ch的位置
返回: 返回指向该位置的指针,如找不到,则返回空指针8. strrchr
char *strrchr(const char *s, int c)
功能: 得到字符串s中最后一个含有c字符的位置指针
返回: 位置指针9. strstr
char* strstr(char* str1,char* str2);
功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)
返回: 返回该位置的指针,如找不到,返回空指针10. strnset
char *strnset(char *s, int ch, size_t n)
功能: 将字符串s中前n个字符设置为ch的值
返回: 指向s的指针11. strset
char *strset(char *s, int ch)
功能: 将字符串s中所有字符设置为ch的值
返回: 指向s的指针12. strtok
char *strtok(char *s1, const char *s2)
功能:分解s1字符串,用特定分隔符(s2)分隔成多个字符串
返回: 字符串s1中首次出现s2中的字符前的子字符串指针
strtok()在参数s1的字符串中发现参数s2中包涵的分割字符时,则会将该字符改为\0字符。在第一次调用时,strtok()必需给予参数s1字符串,往后的调用则将参数s1设置成 NULL。每次调用成功则返回指向被分割出片段的指针。13. strupr
char *strupr(char *s)
功能: 将字符串s中的字符变为大写
strcpy和memcpy的不同点
主要分为以下三点不同:
- 复制内容不同:strcpy只能复制字符串,而memcpy可以复制任何内容,例如字符数组,整型,结构体等
- 复制的方法不同:strcpy不需要指定长度,它遇到字符串结束符’\0’才结束,所以容易溢出。memcpy则需要传入第三个参数来指定长度
- 用途不同:通常在复制字符串的时候用strcpy,而需要复制其他数据类型的时候则一般用memcpy。
参考链接:
http://www.codeceo.com/article/mem-and-strcopy-function.html
https://www.cnblogs.com/chenzhefan/p/8185837.html