#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//模拟实现字符串相关函数
#include<string.h>
//void my_strcpy(char* dest, char* src)
//{
// //这个代码不好
// while (*src != '\0')
// {
// *dest = *src;
// dest++;
// src++;
// }
// *dest = *src;
//}
//#include<assert.h>
const 阻止数据被修改
//void my_strcpy(char* dest, const char* src)
//{
// assert(src != NULL);//断言
// assert(dest != NULL);//断言
// while (*dest++ = *src++)
// {
// //即copy了\0,又使得循环停止
// //还能再优化
// ;
// }
// //while (*src != '\0')
// //{
// // *dest++ = *src++;
// //}
// //*dest = *src;
//}
//int main()
//{
// char arr[20] = "xxxxxxxxxxxxxx";
// char arr1[10] = "hello";
// my_strcpy(arr, arr1);
// printf("%s\n", arr);
// return 0;
//}
//int main()
//{
// /*int num = 10;
// int* p = #
// *p = 20;*/
// //const int num = 10;//const 修饰变量,这个变量就是常变量
// //const int* p = #//const 修饰指针变量的时候,const放在*的左边,修饰的是*p,表示指针指向的内容,是不能通过指针来改变的
// 但是指针变量本身是可以修改的
// ///**p = 20;*/
// //int n = 100;
// //p = &n;
// const int num = 10;//const 修饰变量,这个变量就是常变量
// int* const p = #//const 修饰指针变量的时候,const放在*的右边,修饰的是指针变量p,表示指针变量不能被改变
// //但是指针的内容可以被改变
// *p = 20;
// int n = 100;
// /*p = &n;*/
// printf("%d\n", num);
// return 0;
//
//}
#include<assert.h>
//void my_strcpy(char* dest, char* src)
//{
// //这个代码不好
// while (*src != '\0')
// {
// *dest = *src;
// dest++;
// src++;
// }
// *dest = *src;
// }
// #include<assert.h>
//const 阻止数据被修改
//把src指向的内容拷贝放进dest指向的空间中
// 从本质上讲,希望dest指向的内容被修改,src指向的内容不应该被修改
//strcpy返回的是目标空间的起始地址
char* my_strcpy(char* dest, const char* src)
{
assert(src != NULL);//断言
assert(dest != NULL);//断言
char* ret = dest;
while (*dest++ = *src++)
{
//即copy了\0,又使得循环停止
//还能再优化
;
}
return ret;
}
//strlen函数的模拟实现
//健壮性
//鲁棒性
//size_t - unsigned int
size_t my_strlen(const char* arr)
{
assert(arr != NULL);
size_t count = 0;
while (*arr++)
{
count++;
}
return count;
}
int main()
{
char arr[20] = "xxxxxxxxxxxxxx";
char arr1[10] = "hello";
int a = my_strlen(arr1);
printf("arr1 = %d\n", my_strlen(arr1));
printf("%s\n", my_strcpy(arr, arr1));
return 0;
}
//编程常见的错误
//编译型错误
// 运行时错误
// 链接型错误 - 这个符号不存在或者这个符号写错了
//exturn - 声明外部符号
//
//