最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一篇文章教你如何用C語言實現(xiàn)strcpy和strlen

 更新時間:2022年01月07日 15:01:15   作者:黎丶辰  
這篇文章主要為大家介紹了C語言實現(xiàn)strcpy和strlen的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

 自己實現(xiàn)strcpy、strlen

strcpy的實現(xiàn)

思路:

通過指針訪問地址然后將要copy的文本逐一復制到目的地。

void my_strcpy(char* dest, char* src){
    while (*src !='\0'){
        *dest = *src;
        src++;
        dest++;
    }
    *dest = *src;
}

//自己實現(xiàn)strcpy
int main(){
    char arr1[]="$$$$$$$$$$";
    char arr2[]="hello";
    my_strcpy(arr1,arr2);//將arr的內(nèi)容復制到arr1中
    printf("%s\n",arr2);
    return 0;
}

優(yōu)化1:

在my_strcpy()函數(shù)中*dest和*src直接在表達式中自加,先試用后加所以使用后置++

void my_strcpy(char* dest, char* src){
    while (*src !='\0'){
        *dest++ = *src++;
    }
    *dest = *src;
}

優(yōu)化2:

在while循環(huán)中,因為最后的終止條件是賦值到了絕對0的時候停止循環(huán)。那么最后一次賦值就是賦值0。那我們直接可以將賦值作為我們的終止條件。

void my_strcpy(char* dest, char* src){
    while (*dest++ = *src++);
    *dest = *src;
}

優(yōu)化3:

如果傳入的是空指針我們應該告訴這個輸入有問題。

引入assert();斷言–>如果輸入錯誤顯示錯誤。 個人理解就像java,python中的異常處理。

#include <assert.h>
void my_strcpy(char* dest, char* src){
    assert(dest != NULL);
    assert(src != NULL);
    while (*dest++ = *src++);
    *dest = *src;
}
//自己實現(xiàn)strcpy
int main(){
    char arr1[]="$$$$$$$$$$";
    char arr2[]="hello";
    my_strcpy(arr1,NULL);//將arr的內(nèi)容復制到arr1中
    printf("%s\n",arr2);
    return 0;
}

優(yōu)化4:

在程序員將dest 和 src寫反的情況。我們應該怎么處理呢?

加const 使得我們的原來的數(shù)據(jù)不能被拷貝數(shù)據(jù)不能進行修改。從強制檢測。另一方面解釋:源頭的數(shù)據(jù)的安全性得到保證。

#include <assert.h>
void my_strcpy(char* dest,const char* src){
    assert(dest != NULL);
    assert(src != NULL);
    while (*dest++ = *src++);  //這里寫反的話將不能進行賦值   因為c
    *dest = *src;
}

對于const的講解

const int* p = &num;
int* const p = &num;
const int* const p = &num;

在第一行中:即const 放在指針變量* 的左邊的時候修飾的是*p 也就是說也就是說不能通過*p來改變*p(num )的值。

在第二行中:即const放在指針變量* 的右邊的時候修飾的是指針本身p,p不能被改變。

在第三行中:兩邊都進行const修飾,p與*p都不能改變了。

我的理解:const只能修飾關鍵字本身右邊的第一個東西(像int*就直接理解為指針)。const修飾的東西被限制。

優(yōu)化5:

在官方提供的庫函數(shù)中strcpy是有返回值的。返回什么呢?我們應該返回copy執(zhí)行完成之后的字符串中首字母的地址。但是我們發(fā)現(xiàn)之前已經(jīng)在執(zhí)行的過程中就將dest值修改了。又怎么辦呢?在刷算法題的時候有個經(jīng)驗就是,在對地址進行操作之前先提前備份一份。然后將備份的這個地址位置返回即可。

#include <assert.h>
char* my_strcpy(char* dest,const char* src){
    char* res = dest;
    assert(dest != NULL);
    assert(src != NULL);
    while (*dest++ = *src++);
    *dest = *src;//將'\0'進行賦值。
    return res;
}
#include <assert.h>
char* my_strcpy(char* dest,const char* src){
    char* res = dest;
    assert(dest != NULL);
    assert(src != NULL);
    while (*dest++ = *src++);
    *dest = *src;//將'\0'進行賦值。
    return res;
}

總結

    1. 分析參數(shù)的設計(命名,類型),返回值的情況。
    2. 關于野指針問題,空指針的危害。
  	3. assert的使用方式和作用
  	4. 參數(shù)部分使用const,以及const的作用。
  	5. 注釋的重要性。

strlen的實現(xiàn)

#include <assert.h>
int my_strlen(const char* str){//不希望我的字符串被修改。
    int count = 0;
    assert(str != NULL);//用來保證指針的有效性
    while(*str !='\0'){
        count++;
        str++;
    }
    return count;
}

int main(){
    char arr[] = "abcdef";
    int len = my_strlen(arr);
    printf("%d\n",len);
    return 0;
}

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!

相關文章

  • C語言中的盜賊(小偷)問題詳解

    C語言中的盜賊(小偷)問題詳解

    大家好,本篇文章主要講的是C語言中的盜賊(小偷)問題詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C語言線性表順序存儲結構實例詳解

    C語言線性表順序存儲結構實例詳解

    這篇文章主要介紹了C語言線性表順序存儲結構實例詳解的相關資料,需要的朋友可以參考下
    2017-06-06
  • QT中QStringListModel類的應用介紹

    QT中QStringListModel類的應用介紹

    QStringListModel是最簡單的模型類,具備向視圖提供字符串數(shù)據(jù)的能力,本文主要介紹了QT中QStringListModel類的應用介紹,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • C++中的類成員函數(shù)當線程函數(shù)

    C++中的類成員函數(shù)當線程函數(shù)

    這篇文章主要介紹了C++中的類成員函數(shù)當線程函數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++中隱式類型轉換學習筆記

    C++中隱式類型轉換學習筆記

    在本篇文章里小編給大家整理的是一篇關于C++中隱式類型轉換學習筆記內(nèi)容,有興趣的跟著小編來學習下吧。
    2020-02-02
  • C++異常處理的方式總結

    C++異常處理的方式總結

    C++有一套獨立的異常處理機制,相信大家一定聽說過try,catch這兩
    個詞,今天就來做詳細的介紹,文中通過代碼示例給大家介紹的非常詳細,具有一定參考價值,需要的朋友可以參考下
    2023-12-12
  • 深入學習C語言中常見的八大排序

    深入學習C語言中常見的八大排序

    排序編程中非?;A的的理論方法,雖然排序的方法多,但是理解起來并不難,它是最基本的,初學者一定要掌握的東西。本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值
    2021-11-11
  • C語言中等待socket連接和對socket定位的方法

    C語言中等待socket連接和對socket定位的方法

    這篇文章主要介紹了C語言中等待socket連接和對socket定位的方法,分別為listen()函數(shù)和bind()函數(shù)的用法,需要的朋友可以參考下
    2015-09-09
  • C++實現(xiàn)二叉樹非遞歸遍歷方法實例總結

    C++實現(xiàn)二叉樹非遞歸遍歷方法實例總結

    這篇文章主要介紹了C++實現(xiàn)二叉樹非遞歸遍歷方法實例總結,是算法設計中比較經(jīng)典的一個遍歷算法,需要的朋友可以參考下
    2014-08-08
  • C/C++的內(nèi)存管理你了解嘛

    C/C++的內(nèi)存管理你了解嘛

    這篇文章主要為大家介紹了C/C++的內(nèi)存管理,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01

最新評論

昭苏县| 时尚| 马鞍山市| 松江区| 黄龙县| 龙山县| 平顶山市| 颍上县| 乌审旗| 图们市| 全南县| 牡丹江市| 新建县| 扶风县| 土默特右旗| 三穗县| 怀远县| 石嘴山市| 太谷县| 临江市| 左权县| 呼和浩特市| 郯城县| 隆林| 南召县| 黑龙江省| 宁武县| 桑日县| 平南县| 遂溪县| 分宜县| 淳化县| 安化县| 古交市| 正安县| 龙井市| 祁阳县| 尼勒克县| 马公市| 闽清县| 鄂州市|