c 你了解str 家族嗎?

2021-07-25 15:26:31 字數 4546 閱讀 8888

我總結下關於string家族,此家族比較龐大,比較重要,同時也是面試官特別常考的乙個點,那麼現在我就帶大家一起走進string家族

1)原型:char* strcpy(char* dest,const char* src);

2)作用:把從src位址開始且含有'\0'的字串複製到以dest開始的位址空間

【說明】:src和dest所指的記憶體區域不可以有重疊並且dest有足夠的空間來容納src裡的字串。返回指向dest的指標。

3)模擬實現:

#include#includechar* my_strcpy(char* dest,const char* src)

return ret;

}int main()

; my_strcpy(a,str);

printf("%s ",a);

return 0;

}

2、strncpy

1)原型:char* strncpy(char* dest, const char* src,size_t

2)作用:將src中的字串賦值count個到dest中

【說明】:它和strcpy不同的是,它不是遇到'\0'停止,而是湊夠count個字串才停止。當不夠count個時,用『\0』來進行填充

3)模擬實現:

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

//當要複製的字元個數大於源字串的個數,後面缺的

//字元個數用'\0'來補齊

if(count>0) }

return ret;

}int main()

; my_strncpy(a,str,7);

printf("%s",a);

return 0;

}

1)原型:char* strstr(const char* str,const char* substr)

2)作用:在str中查詢是否存在substr這樣的子串,如果存在,那麼就返回此子串首次在str中出現的位址,否則返回null

3)模擬實現:

#include#includechar* my_strstr(const char* str,const char* substr)

//到這一步,說明子串已經匹配完畢,所以直接返回在原串中的首位址

if(*substart == '\0')

return cp;

//否則要重新進行查詢匹配

substart = substr;

cp++;

} return null;

}int main()

1)原型:char* strcat(char* dest,const char* src)

2)作用:將src裡的字串新增到dest的後面(覆蓋dest的'\0')

【說明】:dest和src所指的區域不可以重疊並且dest有足夠的空間可以容納src,返回指向dest的指標

3)模擬實現:

#include#includechar* my_strcat(char* dest,const char* src)

while(*dest++ = *src++)

{} return ret;

}int main()

1)原型:char* strncat(char* dest,const char* src,size_t count)

2)作用:將src中count個字元新增到dest的後面

3)模擬實現:

#include#includechar* my_strcat(char* dest,const char* src,size_t count)

while(count&&*src)

if(count>0) }

return ret;

}int main()

1)原型:int strcmp(const char* str1,const char* str2)

2)作用:比較兩個字串的大小,如果str1=str2,則返回0,如果str1>str2則返回正數,否則返回負數

3)模擬實現:

#include#includeint my_strcmp(const char* str1,const char* str2)

str1++;

str2++;

} if(*str1>*str2)

return *str1-*str2;

else

return -1;

}int main()

1)原型:int strncmp(const char* str1,const char* str2,size_t count)

2)作用:比較兩個字串中count個字元的大小

3)模擬實現:

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

else

}return *str1-*str2;

}int main()

1)原型:size_t strlen(const char* str)

2)作用:計算字串的長度,但是不包括'\0'

3)模擬實現:

//兩種方法

#include#includesize_t my_strlen(const char* str)

return len;

*/ 方法二:使用遞迴

assert(str);

if(*str!= '\0')

//return 1+my_strlen(str++);//這塊會掛

return 1+my_strlen(++str);

else

return 0;

}int main()

1)原型:void* memecpy(void* dest,const void* src,size_t count)

2)作用:c/c++使用的記憶體拷貝函式,功能是從src所指的記憶體位址的起始位置開始拷貝n個位元組到目標dest所指的記憶體的起始位置中

3)模擬實現:

#include#includevoid* my_memcpy(void* dest,const void* src,size_t count)

return ret;

}int main()

; printf("%s ",my_memcpy(a,s1,3));

return 0;

}

1)原型:void* memmove(void* dest,const char* src,size_t count)

2)作用:將src中count個位元組拷貝到dest中,如果目標區域和源區域有重疊的話,它能夠保證在源串被覆蓋之前將重疊區域拷貝到目標區域,但是src的內容會發生變化。如果沒有重疊區域,那麼它的功能和memcpy的作用是一樣的

3)圖示說明這個函式怎麼回事:、

4)模擬實現:

#include#includevoid* my_memmove(void* dest,const void* src,size_t count)

{ char* pdest = (char*)dest;

char* psrc = (char*)src;

char* ret = (char*)dest;

while(count--)

{ if((pdest>psrc) && (pdest

1) strcpy提供了字串的複製。即strcpy只用於字串複製,並且它不僅複製字串內容之外,還會複製字串的結束符。

2)memcpy提供了一般記憶體的複製。即memcpy對於需要複製的內容沒有限制,因此用途更廣。

strcpy和memcpy主要有以下3方面的區別。

1、複製的內容不同。strcpy只能複製字串,而memcpy可以複製任意內容,例如字元陣列、整型、結構體、類等。

2、複製的方法不同。strcpy不需要指定長度,它遇到被複製字元的串結束符"\0"才結束,所以容易溢位。memcpy則是根據其第3個引數決定複製的長度。

3、用途不同。通常在複製字串時用strcpy,而需要複製其他型別資料時則一般用memcpy

【注意】:memcpy用來在記憶體中複製資料,由於字串是以「\0」結尾的,所以對於在資料中包含「\0」的資料只能用memcpy。

strncpy和memcpy很相似,只不過它在乙個終止的空字元處停止。當n>strlen(s1)時,給s2不夠數的空間裡填充「\0」;當n<=strlen(s1)時,s2是沒有結束符「\0」的。

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

在c語言中,str和mem是常用於進行陣列類資料的操作,而str型別的函式一般適用於字元類資料的操作,mem型別的函式適用於各種型別資料的操作,本文對這兩種型別進行簡單的介紹。個人覺得mem和str這兩者的最大區別在於處理的陣列中是否有null這個符號,即mem可以處理有null的陣列,而str無法...

你了解postMessage嗎?

前言 通常,對於兩個不同頁面的指令碼,只有當執行它們的頁面位於同源 同協議 同主機 同埠 情況下,這兩個指令碼才能相互通訊。window.postmessage 方法可以安全地實現跨域通訊 前提 正確使用 使用 語法 otherwindow.postmessage message,targeorig...

普通感冒你了解嗎

又到了忽冷忽熱愛感冒的季節。感冒對於每乙個人來說都不陌生,確實這是一種常見的不能再常見的疾病了。不過如果你花上時間好好算算,在人的一生中,可能加起來會有5年的時間都在忍受鼻塞 咳嗽 頭疼 咽痛等感冒所帶來的症狀困擾,可能還有將近1年的時間因為感冒臥病在床。感冒英文中常用 cold 一詞,可是感冒和寒...