常用庫函式的模擬實現

2021-08-22 10:40:14 字數 3172 閱讀 1359

size_t strlen (const char* str);
strlen以'\0'為結束標誌

函式返回的是在'\0'前面出現的字元的個數

函式的返回型別是size_t(無符號整形)

//計數器方式

int my_strlen(const char* str)

return count;

}//遞迴實現

int my_strlen(const char* str)

else

}//指標實現

int my_strlen(char* s)

return p-s;

}

char* strcpy(char* des, const char* str);
源字串必須以'\0'結束

會將源字串的'\0'拷貝到目標字串

目標字串空間必須足夠大,必須可變

char* my_strcpy(char* des,const char* str)

return ret;

}

char* strncpy(char* des, const char* str, size_t num);
拷貝num個字元到目標空間

如果源字串長度小於num,拷貝完源字串後,在目標函式後邊追加0,直到num個

char* strcat(char* dest, const char* str);
源字串必須以'\0'結束

目標空間足夠大,可修改

字串不能自己追加自己,不然無'\0'會一直追加下去

char* my_strcat(char* dest, const char* str)

//拷貝

while(*dest++ = *str++)

return ret;

}

char* strncat(char* dest, const char* str, size_t num);
將源字串的第乙個num字元追加到目標字串,並新增乙個終止的'\0'

如果原始檔中字串的長度小於num,則只複製到'\0'之前的內容

char* my_strncat(char* dest, const char* str, size_t num)

return ret;

}

int strcmp(const char* str1, const char*str2);
第乙個不相等出現,哪個大就是哪個

str1>str2,返回大於0的數字

str1=str2,返回0

str1比較到出現兩個字元不一樣,或者乙個字串結束,或者num個字元全部比較完

int my_strncmp(const char* dest,const char* src,size_t num)

dest++;

src++;

} return ret;

}

char* strstr(const char* str1, const char* str2);
返回str2第一次在str1中出現的乙個指標,若str2沒有在str1中出現則返回空指標

void* memcpy(void* dest,const void* src, size_t num);
從源位置開始向後複製num個位元組的資料到目標的記憶體位置

函式在遇到'\0'並不會停下來

如果src和dest有重疊,複製的結果都是未定義的

//void*接收任意型別資料,void*不能解引用,不能自增自減

void* my_memcpy(void* dest,const void* src, size_t num)

return ret;

}

void* memmove(void* dest,const void* src,size_t num);
memmove處理的源記憶體塊和目標記憶體塊可以重疊

//方式一

void* my_memmove(void* dest,const void* src,size_t num)

} else //後->前 }

return ret;

}

//方式二

void* my_memmove(void* dest,const void* src,size_t num)

} else //前->後 }

庫函式的模擬實現

模擬實現strlen 方法1 計數器方式 intmy strlen const char str return count 方法2 不能建立零時變數計數器 intmy strlen const char str 方法3 指標 指標的方式 intmy strlen const char str 模擬實...

模擬實現庫函式 printf

上次在部落格中提到過可變引數列表的使用,今天我再次使用可變引數列表來模擬實現庫函式printf。實現 如下 如有不理解的地方請檢視可變引數列表那篇部落格 include includevoid my printf const char format,break case s break defaul...

Mem庫函式模擬實現

本篇檢視 1 memset 2 memcpy 3 memmove 4 memcmp 5 memchr memset 功能 將一段記憶體初始化為某個值 函式拷貝ch 到buffer 從頭開始的count 個字元裡,並返回buffer指標。函式原型 void memset void buffer,int...