写函数实现strcpy和strlen

实现strcpy

  • 调用库函数实现
#iinclude 
int main()
{
    char arr[20];
    strcpy(arr, "i love you!);  //把原字符串copy到目标串中
    printf("%s\n", arr);
    system("pause");
    return 0;
}
  • 自己写函数实现
#include 
char *my_strcpy(char *dest, const char *src)
{
    assert(dest != NULL);    //判断传过来的指针地址是否为空
    assert(src != NULL);
    int *ret = dest;        //把dest的首地址保存下来,用于返回main函数
    while(*dest++ = *src++)   //一直往后把*src拷到*dest中,包括'\0'
    {
        ;
    }
    return ret;        //返回目标串的首地址
}
int main()
{       
    char arr[20];
    printf("%s\n", my_strcpy(arr, "i love you!"));
    system("pause");
    return 0;
}
  • 关于assert的补充介绍
    assert就是判断指针变量是否为空值,当不为空的时候,程序继续执行下一步,当为空值时,则会报错,结果会提示错误在哪一行。在上述的例子中,它类似于if语句,但if不会做任何判断。当取消assert时,直接加上#define NDEBUG
//#define NDEBUG
assert(dest != NULL);
assert(src != NULL);

//可以写为if
if (dest != NULL)
    return;
if (src != NULL)
    return; 
  • 关于const 介绍总结
//通过指针改变一个变量的值
int num = 10;
int *p = #
*p = 20;

//给变量加上const
const int num = 10;         //num收到const修饰,被保护
const int *p = #        //&num的类型相当于const int *
*p = 20;              //改变num值,会出现warning

(1)const 放在 * 左边

int const *p = #
const int *p = #   //等价

const修饰的是 *p ,指针变量可以被改变,但是指针指向的内容不可以通过指针来修改。
(2)const 放在 * 右边

int * const p = #

const修饰的是 p , 指针变量本身不能改变,但是指针指向的内容可以通过指针来改变。

实现strlen

  • 通过库函数实现
#include 
int main()
{
    char *p = "abcdef";
    int len = strlen(p);
    printf("%d\n", len);
    system("pause");
    return 0;
}
  • 自己写函数实现
#include 
int my_strlen(const char *src)    //*src 不能被改变
{
    assert(src != NULL);        //判断src不能为空值
    int count = 0;
    while(*src++)
    {
        count++;             //记录字符个数
    }
    return count;
}
int main()
{
    char *p = "abcdef";
    int len = my_strlen(p);
    printf("%d\n", len);
    system("pause");
    return 0;
}

你可能感兴趣的:(C)