字串部分函式的重寫和memcpy memmov

2021-08-30 21:37:29 字數 2896 閱讀 8333

(這裡面的字串有些是沒有進行是否為空的判斷,自行參考一下。assert()斷言是預告版內容,比較草率,沒有詳解)

這個函式是乙個複製的作用。在實際運用中應該就是需要需要修改某乙個字串,但是又要保留原有資料,這就需要把它複製到另乙個字串裡面。

//c語言

//模擬實現strcpy

//strcpy的格式是

//strcpy(str,str2)

//將str整個複製到str2

char* strcpy1(char* str,const char* str2)

return str2;

}

這個函式是連線兩個字串的。它的用法簡單直觀,所以直接奉上**

//c語言

//模擬實現strcat

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

while (*str2!='\0')

*str = '\0';//這裡注意

return p3;

}

這個函式是用來判斷乙個字串是不是另乙個字串的字串。下面的**怕是有點不好理解。

int my_strstr(char* str1,char* str2) 

while (*p1)

if (*p2 == '\0')

++p1; //如果兩個元素遇到不相等的,那就重新來比較,

//第乙個字串的元素向下乙個移動來匹配。而字串就回到第乙個元素繼續匹配

//這裡舉乙個例子

//str1="bbcdefg"

//str2="bcde";

//第乙個元素相等的,但是第二元素不等,這時候str1移動下乙個元素,str2回到首位繼續比較

//然後就相等了。總之這是為了防止字串有重合的元素影響比較。

} return 0; //最後乙個字元都沒有匹配上,那就過分很了,不是子串

}}

這個函式是查詢字串中首次出現某個字元的位置,chr是character的縮寫,應該是昂,然後這個應該好理解吧,這個函式返回的是乙個位置哦,不是是否有這個字元。下面奉上**。

//c語言

int my_strchr( const char* str,char ch)

} return adress+1; //+1是為了好看,因為字元是從第0個位置開始的,人從第乙個開始數

}

這是倆字串的比較函式。cmp一看就是compare對吧。兩個字串自左向右逐個字元相比(按ascii值大小相比較),直到出現不同的字元或遇'\0'為止。這裡不是比較是否相同,還有這裡面只能比較字串,即可用於比較兩個字串常量,或比較陣列和字串常量,不能比較數字等其他形式的引數。敲黑板!注意一下昂。奉上**

//c語言

int my_strcmp(const char* str1, const char* str2)

if (*p1<*p2)

else if (*p1==*p2)

else

}

這也是拷貝的函式,但是這個點高階就是從源字串起始位置開始拷貝指定個位元組到目標字串中。當你要拷貝大於原字串長度的時候,也就是 n 大於原字串長度,strncpy 會用 『\0』 來填充,而 memcpy 則會在原字串所在位址按照長度拷貝記憶體裡的值,所以多餘的字元是記憶體中不確定的值。這裡的strncpy是strcpy的高階。**奉上

//語言

//實現memcp

void* my_memcpy(void* str2,void* str1,size_t num)

return ret;

}

這是memcpy的優化版。函式memcpy()   從source  指向的區域向dest指向的區域複製count個字元,如果兩陣列重疊,不定義該函式的行為。  

而memmove(),如果兩函式重疊,賦值仍正確進行。

//c語言

//實現memmove

void* my_memmov(void* copy,void* from,size_t num)

} else }

return ret;

}

8、這裡有幾個字串函式的處理函式,但是它們的用法和上面6和7差不多的。簡單書寫還原的函式。

//c語言

//1.模擬實現strncpy

#define _crt_secure_no_warnings

#include#include#includechar* my_strncat(char* dest,const char* sor,size_t num)

while (num--)

} *dest = '\0';

return ret;

}void main()

//2.模擬實現strncat

#include#include#includechar *my_strncpy(char *dest, const char *src, size_t n)

*dest = '\0';

return ret;

}void main()

//3.模擬實現strncmp

#include#includeint my_strncmp(const char* str1,const char* str2,size_t num)

else

} if (*str1>*str2)

else if (*str1==*str2)

else

}void main()

編寫字串複製函式strcpy及memcpy函式

strcpy與memcpy兩函式的經典實現,哈哈,不過,不是偶寫的!char strcpy char des,const char src void memcpy void pvto,const void pvfrom,size t size 經典試題 已知strcpy函式的原型是 char str...

部分C庫函式重寫以及反彙編分析之memch

從buf所指記憶體區域的前count個位元組查詢字元ch。說明 當第一次遇到字元ch時停止查詢。如果成功,返回指向字元ch的指標 否則返回null。include stdafx.h include void pmesch void buf int ch int count int main int ...

字串部分常用函式

addslashes 使用反斜線引用字串 htmlentities 函式把字元轉換為 html 實體 htmlspecialchars 函式把預定義的字元轉換為 html 實體 nl2br 在字串所有新行之前插入 html 換行標記 sprintf fo rmat args 函式把格式化的字串寫入變...