写代码的实用小技巧

const和arrest的用法

#include <stdio.h>
#include <assert.h>
//void my_strcpy(char* des, char* src)
//{
//  while (*src!='\0')
//  {
//      *des = *src;
//      *des++;
//      *src++;
//  }
//  *des = *src;
//} --6分
//void my_strcpy(char* des, char* src)
//{
//  while (*src != '\0')
//  {
//      *des++ = *src++;
//  }
//  *des = *src;
//}
//void my_strcpy(char* des, char* src)
//{
//  while (*des++ = *src++)
//  {
//      ;
//  }
//} //妙哇 7分 但是没有考虑到输入有误的情况,比如输入一个空指针
//void my_strcpy(char* dest, char* src)
//{
//  assert(dest != NULL);//断言
//  assert(src != NULL); //断言
//  //if (dest != NULL && src != NULL)
//  //{
//  while (*dest++ = *src++)
//  {
//      ;
//  }
//  //}
//} //8分
//void my_strcpy(char* dest, const char* src)
//{
//  assert(dest != NULL);//断言
//  assert(src != NULL); //断言
//  while (*dest++ = *src++)
//  {
//      ;
//  }
//} //9分
char* my_strcpy(char* dest, const char* src)
{
    char* ret = dest;
    assert(dest != NULL);//断言
    assert(src != NULL); //断言
    //把src指向的字符串拷贝到dest指向的空间里面去,包含'\0'字符
    while (*dest++ = *src++)
    {
        ;
    }
    return ret; 
    //返回到目的地的起始地址,而且拥有返回值时才能作为其他函数的参数,进行链式访问
}   //10分
int main()
{
    char arr1[] = "***************";
    char arr2[] = "hasaki";
    printf("%s\n", my_strcpy(arr1, arr2));

    return 0;
}
//很烦的一点,NULL一直显示未定义,查了之后说是需要stdio.h,我也引用了啊,最后发现,这个头文件需要引用在NUL的使用之前

//#include <stdio.h>
//int main()
//{
//  const int a = 10;
//  int* const p = &a;
//  //const放在指针变量*左边时,修饰的是*p,也就是说,不能通过p来改变*p(num)的值
//  //const放在指针变量*右边时,修饰的是指针变量p本身,p不能被改变了
//  *p = 20;
//  int n = 1;
//  int* np = &n;
//  //p = np;
//  printf("%d\n", a);
//  return 0;
//}

在程序中熟练使用const和arrest能有效地避免很多问题,健壮代码。

strlen的模拟实现

#include <stdio.h>
#include <assert.h>
int my_strlen(const char* str)
{
    int count = 0;
    assert (str != NULL); //assert需要名为 <assert.h>的头文件
    while (*str != '\0')
    {
        str++;
        count++;
    }
    return count;
}
int main()
{
    char arr[] = "abcdefg";
    int len = my_strlen(arr);
    printf("%d\n", len);
    return 0;
}

还有就是头文件的调用,一般说明什么标识符未定义,要么就是函数没有调用头文件,要么就是拼写错误,strlen的模拟实现以前也写过三个,这个应该是所有的里面最优秀的一个,最接近真的strlen函数的一个模拟函数。

猜你喜欢

转载自blog.51cto.com/15078858/2608725