操作系统:MAC OS
编译器: XCODE
以下均为个人学习经验,如有不对请指教
**********************************************************
( 整理好的word文档黏贴过来黑点变成字符n了~~~~(>_<)~~~~ )Malloc,calloc,relloc函数都在stdlib.h函数库内。它们的返回值都是请求系统分配的地址,如果请求失败就返回NULL。
n malloc函数
函数声明: void*malloc(unsigned long); 形参:内存大小;返回地址
int*a=(int *)malloc(10*sizeof(int)); //手动申请内存
if(!a) //若申请失败返回NULL
exit(-1);
使用该内存;
free(a); //释放内存
a=NULL; //把指向内存的指针变量赋值为NULL,防止野指针产生
n calloc函数
函数声明:void *calloc(size_t count, size_t size);
size_t count : 对象个数
size_t size : 每个对象占用的内存空间大小
空间大小 =count * size;
申请到的内存块被清为0
EG:int *pnum= (int *)calloc(10, sizeof(int));
n Malloc与clloc区别
malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。calloc在动态分配完内存后,自动初始化该内存空间为零。
n relloc函数
函数声明: void* realloc(void* ptr, unsignednewsize);
realloc调用形式为(类型*)realloc(*ptr,size):将ptr内存大小增大到size。
(也可以缩小(字符串不自动添加\0),缩小的内容消失) 。
特殊用法
realloc(NULL, 200);<==>malloc(200);
realloc(ptr,0); <==> free(ptr);
realloc有个细节需要注意:
无非就是将已经存在的一块内存扩大。
1.如果当前连续内存块足够 realloc 的话,只是将p所指向的空间扩大,并返回p的指针地址。这个时候 q 和 p 指向的地址是一样的。
2.如果当前连续内存块不够长度,再找一个足够长的地方,分配一块新的内存,q,并将 p指向的内容 copy到 q,返回 q。并将p所指向的内存空间删除。(堆上处理)
以下包含在string.h文件中
n 字符串拷贝函数
char *strncpy(char *dst, const char *src, size_t n);
size_t n: 允许最大可以拷贝的字符个数
如果拷贝的是整个字符串, 那么得到的也是一个字串,
如果拷贝的是字符数组, 那么得到的也是字符数组
n 字符串比较函数
int strncmp(const char *, const char *, size_t n);
size_t n: 最大比较字符个数
如果前后字符串的前size个字符相同,函数返回值为0。
当比较的字符中出现的第一个不同,则返回前者形参-后者形参的值
n 查找字符函数
char *strchr(const char *, int);
当找到第一个相同的字符,则返回该字符的地址,否则返回NULL
n 字符串拼接函数(接到前者后面)
char *strncat(char *, const char *, size_t n);
size_t n: 最大拼接字符个数
n 查找字串
char *strstr(const char *s1, const char *s2);
返回 s2字符串在s1字符串中第一次出现的位置
找不到对应的字串, 返回NULL;
n 字符串分割函数
char *strtok(char *src, const char *demi);
1.strtok 把src字符串中所有的分隔符变成'\0'
2.直接修改原字符串
3.只有第一调用的时候需要传递字符串的首地址, 从第二次开始需
要传递NULL
n int atoi(const char *);
把数字字符串转换成整型
以下包含在ctype.h文件中
n isalnum()//判断字符是否是数字字符或者字母字符, 如果是返回1否则返回0;
n isalpha()//判断字符是否是字母字符,如果是返回1否则返回0;
n isdigit()//判断字符是否是十进制数字字符,如果是返回1否则返回0;
n islower()//判断字符是否是小写字母字符,如果是返回1否则返回0;
n isup()//判断字符是否是大写字母字符,如果是返回1否则回0;
n isxdigit()//判断字符是否是十六进制数字字符,如果是返回1否则返回0;
n tolower()//把大写字符转换为小写字母字符, 返回小写字符;
n toupper()//把小写字符转换为大写字母字符, 返回大写字符;
n digittoint()//把十六进制数字字符转换为整型,
n ishexnumber()//等价isxdigit()
n isnumber()//等价isdigit()