strcp()
char arr[110]="xxxxxxxxxx"l
char arr2[20]="hello";
strcpy(arr1,arr2);
printf("%s\n",arr1); // \n 为字符串结束标志
//strcp(1.目标空间起始地址,2.原空间的起始地址)
模拟实现 my_strcp()
void my_strcp(char*dest,char*src)
{
while(*src!='\0')
*src++;
*dest++;
}
优化: *dest++=*src++ //最终\0赋值过去为假 退出while循环
最终优化: while(*dest++=*src++)
assert(断言):
头文件 #include<assert.h>
assert(src!=NULL); //src不能为假 如果为假直接报错
while(*dest++=*src++)
{
;
}
const :
修饰指针变量时 const放在*左边 修饰得失*p 表示指针指向内容不能通过指针来改变的 单指针变量p本身是可修改的
int n=100; p=&n;
*p不可修改 p可修改
代码中如果arr1arr2换位置会报错 应为arr1长度比arr2长 arr1长的放入arr2短的中不行
void mt_strcp(*char dest,const char *src) //此时用const则会帮助报错指出
const int num=10;
int*p=# //const修饰变量 这个被修饰的变量成为常变量不可被修改 单本质还是变量
*p=20;
打印p //num不可修改
模拟实现strlen()
int my_strlen(const char*str)
{
assert(str); //如果str为假 报错
size_t i,j;
while(str++) //size_t 是无符号整形unsigned int
{
j++;
}
return j;
}
编译型错误:一般都是语法错误
链接型错误:定义函数错误 可能是定义调用名字不一样或者根本没定义(难找)
定义
调用