str 函数和mem函数总结

字符函数 和 内存函数**

1 . size_t strlen (const char*string)
返回一个无符号整数
函数 :求指针指向的字符串的长度,遇见NUL停止,但不计入NUL(’\0’而不是0),参数## 标题是一个指针;
断言assert()//位于assert.h头文件
递归求字符串长度函数
int Mystrlen(int *str)
{
assert(*str);//断言是不是空指针
if(*str ==’\0’)
return 0;
else
return 1+Mystrlen(str+1);
}//递归函数可能会导致栈溢出(栈争)

2 char * strcmp( char det,const charsrc)*//遇见’\0’停止,const 特别重要,源不能修改
越界是可以成功编译的,但不能成功访问;
while(++dst == ++src);先赋值 ,再判断真假 相当于do while的简化
3 strcat(char
dst,const char
src);//字符串拼接(追加)函数
要求 ,dst 的长度一定是足够的
注意: 他会自动删除目标字符串最后的 ‘\0’ 字符, 源字符串遇见’\0’,就停
4 **int strcmp(const char
p1,const char * p2)**//字符串比大小,
,由第一个不相等时的返回值决定返回值;只有当两者同时走到了NUL,则返回0;

5 strcpy( dstp1,srcp2);正常复制
strncpy( dstp1,srcp2,int n);还是遇见NUL停,但复制后,程序员自己要处理————————尾部加NUL;

同样 strncat(char* p1,char* p2,size_t n);
strncmp(dstp1,srcp2,size_t n);字符串比较大小是安ASCII码比较的
strstr(char p1,char*p2);找到返回第一次出现的位置的指针,没找到返回一个空指针;*

str系列针对字符串; mem类型针对任意类型

void* memcpy(void* dst,void * src,size_t n);//**void 类型可以接受任意类型,在函数内部进行强转为需要类型的指针 ,以字节为单位拷贝
**
eg char类型4 个 n =1
4;int 类型4 个 n=4*4=16;
eg : int a[500]={2,3,4,5,6};
int b[200];

void* memcpy(b,a,sizeof(int) * 100);//前100个拷贝

注意 : 内存重叠 :内存重叠结果是未定义的; VS下有的编译器解决了内存重叠问题

*memmove(void dst,void * src,size_t num)**函数解决了内存重叠问题;
重叠 分为: 前重叠 和 后重叠: 不处理结果: 丢失数据;
前重叠: 从前往后拷 ;
后重叠: 从后给前拷
判断if(dst>src &&dst <src+num)//目标在后,后重叠
if (dst<src && src<dst+ num)// 目标在前 ,前重叠
在这里插入图片描述

反思 1 const 关键字的重要性 ——————>细节决定成败
2 传指针时 断言的重要性 千万不能丢,防止传空指针
2 写函数时 尽量以库函数的形式写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值