寫代碼的實用小技巧

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函數的一個模擬函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章