C中str家族和mem家族的簡介

2021-08-04 09:38:53 字數 3810 閱讀 8622

在c語言中,str和mem是常用於進行陣列類資料的操作,

而str型別的函式一般適用於字元類資料的操作,mem型別的函式適用於各種型別資料的操作,本文對這兩種型別進行簡單的介紹。

個人覺得mem和str這兩者的最大區別在於處理的陣列中是否有null這個符號,即mem可以處理有null的陣列,而str無法處理擁有null的陣列。

它們的標頭檔案都是

一般而言,memset都被用於對陣列進行初始化,而str中沒有該型別的函式。

memset的函式:void *memset(void *s, int ch, size_t n);

詳解://將字串src複製到dst裡面,其返回值為dst的位址;

char *strcpy*(char *dst, char const *src);

//從src複製len個字元到dst裡,返回dst的位址,dst的尾部可能會沒有nul,若src的長度不足len的長度,則自動以null補足。

char *strncpy(char *dst, char const *src, size_t len);

//將字串src複製到dst裡面,其返回值為dst裡   null    的位址;

char *stpcpy*(char *dst, char const *src);

//從src複製len個字元到dst裡,返回dst中複製src後隨之的字元的位址,若src的長度不足len的長度,則自動以null補足,並返回第乙個null處。

char *stpncpy(char *dst, char const *src, size_t len);

//從src所指的位址開始拷貝n個位元組到dst所指的位址處,返回值為dst所指的位址

void *memcpy(void *dst, void *src, size_t n);

//從src所指的位址開始拷貝n個位元組到dst所指的位址處,返回值為dst之後第乙個位元組的位址

void *mempcpy(void *dst, void *src, size_t n);

//由src所指記憶體區域複製不多於count個位元組到dest所指記憶體區域,如果遇到字元c則停止複製。

//返回值:如果c沒有被複製,則返回null,否則,返回字元c 後面緊挨乙個字元位置的指標。

void memccpy(void *dest, void *src, unsigned char c, unsigned int count);

memcpy、strcpy和strncpy的詳解:

mempcpy、stpcpy和stpncpy的詳解:

//從buf所指記憶體區域的前count個位元組查詢字元ch,當第一次遇到字元ch時停止查詢。若成功,則返回指向字元ch的指標,否則返回null。

void *memchr(const void *buf, int ch, size_t count);

//從buf所指記憶體區域的前count個位元組查詢字元ch,當最後一次遇到字元ch時停止查詢。若成功,則返回指向字元ch的指標,否則返回null。

void *memrchr(const void *s, int c_in, size_t n);

//該函式是gnu的擴充套件函式,非c的標準函式

//與strstr類似,只是haystack_start和needle_start為字元陣列,用於尋找needle_start在haystack_start中第一次出現的位置,成功則返回該位置的位址,失敗返回null

void *memmem(const void *haystack_start, size_t haystack_len, const void *needle_start, size_t needle_len);

//獲得字元ch在str裡第一次出現的位址,其返回值為該位址

char * strchr(char const *str, int ch);

//獲得字元ch在str裡最後一次出現的位址,返回值為對應位址

char * strrchr(char const *str,int ch);

//獲得字串group裡任意乙個字元在str裡第一次出現的位址,並返回該位址,若失敗,返回null

char *strpbrk(char const *str, char const *group);

//查詢字串dest在字串src中第一次出現的位置,若成功則返回該位置的位址,失敗則返回null

char strstr(char const* src, char const *dest);

//對比記憶體區域buf1和buf2的前count個位元組

int memcmp(const void *buf1, const void *buf2, unsigned int count)

//對比字串s1和s2,相等返回1,s1大於s2則返回正數,s1小於s2則返回負數

int strcmp(char const *s1, char const *s2);

//對比字串s1和s2前len個字元是否相等

int strncmp(char const *s1,char const *s2,size_t len);

memcmp、strcmp和strncmp的詳解:

//用於隱藏字串中的一部分字元,將對應長度的字串和42進行xor來進行隱藏原來的字元,復原可以通過再執行一次函式

void *memfrob(void *s,size_t n);

//用src取代dst尾部的'/0',並且返回值為dst的位址,相當於黏貼

char *strcat(char *dst, char const *src);

//從src裡取n個字元取代dst尾部的'/0',並且返回值為dst的位址,相當於黏貼

char *strncat(char *s1, const char *s2, size_t n);

strcat、strncat和自編memcat的介紹:

//求字串string的長度(不包括電腦自動新增的『/0』)

size_t strlen(char const*string);

//返回從str開頭開始與group不一樣的字元數

size_t strcspn(char const *str,char const* group);

//返回從str開頭開始與group一致的字元數

size_t strspn(char const *str, char const *group);

int len1,len2;

char buffer = "25,142,330,smith,j,239-4123";

len1 = strspn(buffer, "0123456789");//len1為2,因為25後面是逗號','

len2 = strspn(buffer, ",0123456789");//len2為11,因為「330,」的後面是s

//用於提取字串str中被sep所分隔的各個字串,失敗返回null

char *strtok(char *str, char const *sep);

自己編的乙個用於提取指定字串:

void cb_stringpick(char *src, char *begin,char middle, char *end)

middle[middle_len] = '\0';

}

ps:因為字串在c中是以常量的形式存在的,所以如果使用char*的形式,則要麼

在初始化時給字串賦值 ,比如  char * str = 」abcd「;

要麼將其設為 char * str = null;

但字串一旦定義以後便不能對其進行修改了,故如果字串是要修改的話,應該將其定義為字元陣列:

char str = "abcd";

c 你了解str 家族嗎?

我總結下關於string家族,此家族比較龐大,比較重要,同時也是面試官特別常考的乙個點,那麼現在我就帶大家一起走進string家族 1 原型 char strcpy char dest,const char src 2 作用 把從src位址開始且含有 0 的字串複製到以dest開始的位址空間 說明 ...

Clang LLVM的C語言家族前端

clang llvm的c語言家族前端 clang專案為llvm 專案的c語言家族 c,c objective c c opencl,cuda和renderscript 中的語言提供了語言前端和工具基礎結構。提供了gcc相容的編譯器驅動程式 clang 和msvc相容的編譯器驅動程式 clang cl...

Matlab中處理連通域的函式家族

我們在進行影象處理的時候經常會遇到對連通區域的一些操作,比如計算連通域面積 對連通域計數等,對於這類問題很多人會沒有思路不知所措,好在matlab工具箱給提供了這些基本的函式,實在是方便了不少啊!如果想知道演算法原理,只需要檢視響應函式的源 即可。廢話不多說,讓我們一一來看這些常用的函式吧 1 ma...