我總結下關於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 一詞,可是感冒和寒...