庫函式模擬實作
- 1.模擬實作strlen(3種方法)
- 2.模擬實作strcat
- 與strncat區別
- 3.模擬實作strcmp
- 與strncmp區別
- 4.模擬實作strcpy
- 與strncpy區別
- 5.模擬實作strstr
- 6.模擬實作strcmp
- 7.模擬實作memcpy
- 8.模擬實作memove
- 9.記憶體操作函式與字串操作函式區別
1.模擬實作strlen(3種方法)
#include<stdio.h>
#include<windows.h>
#pragma warning(disable:4996)
//while(*str)與while(*str!='\0')與while(*str!=0)的區別
//效果相同,但是處理程序不一樣
//while (*str)----將*str直接按邏輯值測驗
//while (*str != '\0')----將*str與'\0'按char字符比較,再得邏輯值
//while (*str != 0)----將*str與0按int整數比較,再得邏輯值
//== == == == == == == == == == == ==
//編碼規范要求用第二種形式
//計數器方法
int Strlen_1(const char *str)
{
int count = 0;
if (str == NULL)
{
return -1;
}
while (*str)
{
str++;
count++;
}
return count;
}
//遞回,指標+1,往后移一次加一,不用創建臨時變數計數器
int Strlen_2(const char *str)
{
if (str == NULL)
{
return -1;
}
if (*str == '\0')
{
return 0;
}
else
return 1 + Strlen_2(str + 1);
}
//指標-指標方法
int Strlen_3(char *str)
{
char *p = str;
while (*p)
{
p++;
}
return p - str;
}
int main(){
char *str = "abcd";
int ret=Strlen_1(str);
int re =Strlen_2(str);
int r = Strlen_3(str);
printf("%d %d %d", ret,re,r);
system("pause");
return 0;
}
2.模擬實作strcat
#include<stdio.h>
#include<windows.h>
#pragma warning(disable:4996)
char* Strcat( char* dest,const char* src)
{
char *ret = dest;
while (*dest)
{
dest++;
}
//src為const不過這里只是根據src的地址得到src的內容
//而dest如果為const的話就不能吧src的內容賦值到dest的空間里,
while ((*dest++=*src++))
{
;
}
//因為之前有dest已經發生變化,內容指向,u所以要定義一個ret指向l
return ret;
}
int main(){
//這里要用陣列定義
char dest[] = "love";
char* src = " you";
char* ret=Strcat(dest,src);
printf("%s", ret);
system("pause");
return 0;
}
與strncat區別
3.模擬實作strcmp
#include<stdio.h>
#include<windows.h>
#include<assert.h>
#pragma warning(disable:4996)
int Strcmp(const char* dest, const char* src)
{
int ret = 0;
assert(src != NULL);
assert(dest != NULL);
while (!(ret=*(unsigned char*)dest - *(unsigned char*)src)&&*src)
{
src++;
dest++;
}
if (ret > 0)
{
return 1;
}
else if (ret < 0)
{
return -1;
}
return ret;
}
int main(){
char *dest = "abd";
char *src = "abcd";
int ret=Strcmp(dest, src);
printf("%d", ret);
system("pause");
return 0;
}
與strncmp區別
4.模擬實作strcpy
#include<stdio.h>
#include<windows.h>
#pragma warning(disable:4996)
char* Strcat( char* dest,const char* src)
{
char *ret = dest;
while (*dest)
{
dest++;
}
//src為const不過這里只是根據src的地址得到src的內容
//而dest如果為const的話就不能吧src的內容賦值到dest的空間里,
while ((*dest++=*src++))
{
;
}
//因為之前有dest已經發生變化,內容指向,u所以要定義一個ret指向l
return ret;
}
int main(){
//這里要用陣列定義
char dest[] = "love";
//可以用指標定義嗎
char* src = " you";
char* ret=Strcat(dest,src);
printf("%s", ret);
system("pause");
return 0;
}
與strncpy區別
strncpy相對于strcpy來說, 被認為是比較安全的函式, 不會造成目標緩沖區的溢位. 但是該函式不會再目標緩沖區的結尾自動加上字串結束標志符’\0’, 需要在程式中手工在結束處置’\0’.
5.模擬實作strstr
6.模擬實作strcmp
7.模擬實作memcpy
8.模擬實作memove
9.記憶體操作函式與字串操作函式區別
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/226163.html
標籤:其他
