keil下的string.h函式
阿新 • • 發佈:2019-01-09
(1).strchr
原型:extern char *strchr(const char *s,char c);
const char *strchr(const char* _Str,int _Val)
char *strchr(char* _Str,int _Ch)
標頭檔案:#include <string.h>
功能:查詢字串s中首次出現字元c的位置
說明:返回首次出現c的位置的指標,如果s中不存在c則返回NULL。
返回值:Returns the address of the first occurrence of the character in the string if successful, or NULL otherwise
(2).strcat
原型
extern char *strcat(char *dest,char *src);
用法
#include <string.h>
在C++中,則存在於<cstring>標頭檔案中。
功能
把src所指字串新增到dest結尾處(覆蓋dest結尾處的'\0')並新增'\0'。
說明
src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。
返回指向dest的指標。
(3).strncat
原型:extern char *strncat(char *dest,char *src,int n);
用法:#include <string.h>
功能:把src所指字串的前n個字元新增到dest結尾處(覆蓋dest結尾處的'\0')並新增'\0'。
說明:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。
返回指向dest的指標。
(4).strcmp
函式簡介原型:extern int strcmp(const char *s1,const char * s2); 用法:#include <string.h> 功能:比較字串s1和s2。 說明: 當s1<s2時,返回值<0 ; 當s1=s2時,返回值=0 ; 當s1>s2時,返回值>0 , 即:兩個字串自左向右逐個字元相比(按ASCII值大小相比較),直到出現不同的字元或遇'\0'為止。如: "A"<"B" "a">"A" "computer">"compare" 特別注意:strcmp(const char *s1,const char * s2)這裡面只能比較字串,不能比較數字等其他形式的引數。 原型:extern int strcmp(const char *s1,const char * s2);
例:#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int p;
char k1[12]="15104547520";
char k2[12]="15104547520";
void main()
{
p=strcmp(k1,k2);
printf("%d\n",p);
}
注:通過改變k1,k2,看看輸出結果有什麼不同
(5).strncmp
函式名: strncmp
功 能: 串比較
用 法: int strncmp(char *str1, char *str2, int maxlen);
說明:比較字串str1和str2的大小,如果str1小於str2,返回值就<0,反之如果str1大於str2,返回值就>0,如果str1等於str2,返回值就=0,maxlen指的是str1與str2的比較的字元數。此函式功能即比較字串str1和str2的前maxlen個字元。
(6).strcpy
原型宣告:extern char *strcpy(char *dest,char *src);
標頭檔案:string.h
功能:把src所指由NUL結束的字串複製到dest所指的陣列中。
說明:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。
返回指向dest的指標
(7).strncpy
strncpy:字串複製
原型:char * strncpy(char *dest, char *src, size_t n);
功能:將字串src中最多n個字元複製到字元陣列dest中(它並不像strcpy一樣遇到NULL才停止複製,而是等湊夠n個字元才開始複製),返回指向dest的指標。
說明:
如果n > dest串長度,dest棧空間溢位產生崩潰異常。
否則:
1)src串長度<=dest串長度,(這裡的串長度包含串尾NULL字元)
如果n=(0, src串長度),src的前n個字元複製到dest中。但是由於沒有NULL字元,所以直接訪問dest串會發生棧溢位的異常情況。
如果n = src串長度,與strcpy一致。
如果n = dest串長度,[0,src串長度]處存放於desk字串,(src串長度, dest串長度]處存放NULL。
2)src串長度>dest串長度
如果n =dest串長度,則dest串沒有NULL字元,會導致輸出會有亂碼。如果不考慮src串複製完整性,可以將dest最後一字元置為NULL。
綜上,一般情況下,使用strncpy時,建議將n置為dest串長度(除非你將多個src串都複製到dest陣列,並且從dest尾部反向操作),複製完畢後,為保險起見,將dest串最後一字元置NULL,避免發生在第2)種情況下的輸出亂碼問題。當然嘍,無論是strcpy還是strncpy,保證src串長度<dest串長度才是最重要的
(8).strlen
原型:extern unsigned int strlen(char *s);,在Visual C++ 6.0中,原型為size_t strlen( const char *string );,其中size_t實際上是unsigned int,在VC6.0中可以看到這樣的程式碼:typedef unsigned int size_t;。
標頭檔案:string.h
格式:strlen (字元陣列名)
功能:計算字串s的(unsigned int型)長度,不包括'\0'在內
說明:返回s的長度,不包括結束符NULL。
(9).strpos
strpos() 函式返回字串在另一個字串中第一次出現的位置。
如果沒有找到該字串,則返回 false
(10).strrchr()
strrchr() 函式查詢字元在指定字串中從後面開始的第一次出現的位置,如果成功,則返回指向該位置的指標,如果失敗,則返回 false
(11).strrpos()
strrpos() 函式查詢字串在另一個字串中最後一次出現的位置。
如果成功,則返回位置,否則返回 false
(12).strspn
strspn(返回字串中第一個不在指定字串中出現的字元下標)
表頭檔案 #include<string.h>
定義函式 size_t strspn (const char *s,const char * accept);
函式說明 strspn()從引數s 字串的開頭計算連續的字元,而這些字元都完全是accept 所指字串中的字元。簡單的說,若strspn()返回的數值為n,則代表字串s 開頭連續有n 個字元都是屬於字串accept內的字元。
返回值 返回字串s開頭連續包含字串accept內的字元數目
(13).strcspn
原型:size_t strcspn(const char *s1,const char *s2);
相關標頭檔案:#include <string.h>
功能:順序在字串s1中搜尋與s2中字元的第一個相同字元,返回這個字元在S1中第一次出現的位置。
說明:(返回第一個出現的字元在s1中的下標值,亦即在s1中出現而s2中沒有出現的子串的長度。)
簡單地說,若strcspn()返回的數值為n,則代表字串s1開頭連續有n個字元都不含字串s2內的字元。
(14).strpbrk
用法:#include <string.h>
功能:在字串s1中尋找字串s2中任何一個字元相匹配的第一個字元的位置,空字元NULL不包括在內。
說明:返回指向s1中第一個相匹配的字元的指標,如果沒有匹配字元則返回空指標NULL
(15). strstr
函式名: strstr
功 能: 在字串中查詢指定字串的第一次出現
用 法: char *strstr(char *str1, char *str2);
strstr原型:extern char *strstr(char *haystack, char *needle);
標頭檔案:#include <string.h>
功能:從字串haystack中尋找needle第一次出現的位置(不比較結束符NULL)。
說明:返回指向第一次出現needle位置的指標,如果沒找到則返回NULL
(16).strtok
原型 char *strtok(char *s, const char *delim);
功能
分解字串為一組字串。s為要分解的字串,delim為分隔符字串。
說明
strtok()用來將字串分割成一個個片段。引數s指向欲分割的字串,引數delim則為分割字串,當strtok()在引數s的字串中發現到引數delim的分割字元時則會將該字元改為\0 字元。在第一次呼叫時,strtok()必需給予引數s字串,往後的呼叫則將引數s設定成NULL。每次呼叫成功則返回被分割出片段的指標。
返回值
從s開頭開始的一個個被分割的串。當沒有被分割的串時則返回NULL。
所有delim中包含的字元都會被濾掉,並將被濾掉的地方設為一處分割的節點
(17).memcmp
原型:int memcmp(const void *buf1, const void *buf2, unsigned int count);
用法:#include <string.h>或#include<memory.h>
功能:比較記憶體區域buf1和buf2的前count個位元組。
說明:
當buf1<buf2時,返回值<0
當buf1=buf2時,返回值=0
當buf1>buf2時,返回值>0
(18).memcpy
函式原型 void *memcpy(void *dest, const void *src, size_t n);
功能
由src指向地址為起始地址的連續n個位元組的資料複製到以destin指向地址為起始地址的空間內。
所需標頭檔案
#include <string.h>
返回值
函式返回一個指向dest的指標。
說明
1.source和destin所指記憶體區域不能重疊,函式返回指向destin的指標。
2.與strcpy相比,memcpy並不是遇到'\0'就結束,而是一定會拷貝完n個位元組。
3.如果目標陣列destin本身已有資料,執行memcpy()後,將覆蓋原有資料(最多覆蓋n)。如果要追加資料,則每次執行memcpy後,要將目標陣列地址增加到你要追加資料的地址。
//注意,source和destin都不一定是陣列,任意的可讀寫的空間均可
(19).memchr
原型:extern void *memchr(void *buf, char ch, unsigned int count);
用法:#include <string.h>
功能:從buf所指記憶體區域的前count個位元組查詢字元ch。
說明:當第一次遇到字元ch時停止查詢。如果成功,返回指向字元ch的指標;否則返回NULL
(20).memccpy
原型:extern void *memccpy(void *dest, void *src, unsigned char c, unsigned int count);
引數:
dest Pointer to the destination.
src Pointer to the source.
c Last character to copy.
count Number of characters.
用法:#include <string.h>
功能:由src所指記憶體區域複製不多於count個位元組到dest所指記憶體區域,如果遇到字元c則停止複製。
返回值:如果c沒有被複制,則返回NULL,否則,返回一個指向緊接著dest區域後的字元的指標
(21).memmove
原型:void *memmove( void* dest, const void* src, size_t count );
用法: #include <string.h>或#include <memory.h>
功能:由src所指記憶體區域複製count個位元組到dest所指記憶體區域。
說明:src和dest所指記憶體區域可以重疊,但複製後dest內容會被更改。函式返回指向dest的指標
(22).memset
需要的標頭檔案 <memory.h> or <string.h>
函式原型
void *memset(void *s, int ch, unsigned n);memset原型 (please type "man memset" in your shell)
void *memset(void *s, int c, size_t n);
memset:作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快方法
原型:extern char *strchr(const char *s,char c);
const char *strchr(const char* _Str,int _Val)
char *strchr(char* _Str,int _Ch)
標頭檔案:#include <string.h>
功能:查詢字串s中首次出現字元c的位置
說明:返回首次出現c的位置的指標,如果s中不存在c則返回NULL。
返回值:Returns the address of the first occurrence of the character in the string if successful, or NULL otherwise
(2).strcat
原型
extern char *strcat(char *dest,char *src);
用法
#include <string.h>
在C++中,則存在於<cstring>標頭檔案中。
功能
把src所指字串新增到dest結尾處(覆蓋dest結尾處的'\0')並新增'\0'。
說明
src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。
返回指向dest的指標。
(3).strncat
原型:extern char *strncat(char *dest,char *src,int n);
用法:#include <string.h>
功能:把src所指字串的前n個字元新增到dest結尾處(覆蓋dest結尾處的'\0')並新增'\0'。
說明:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。
返回指向dest的指標。
(4).strcmp
函式簡介原型:extern int strcmp(const char *s1,const char * s2); 用法:#include <string.h> 功能:比較字串s1和s2。 說明: 當s1<s2時,返回值<0 ; 當s1=s2時,返回值=0 ; 當s1>s2時,返回值>0 , 即:兩個字串自左向右逐個字元相比(按ASCII值大小相比較),直到出現不同的字元或遇'\0'為止。如: "A"<"B" "a">"A" "computer">"compare" 特別注意:strcmp(const char *s1,const char * s2)這裡面只能比較字串,不能比較數字等其他形式的引數。 原型:extern int strcmp(const char *s1,const char * s2);
例:#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int p;
char k1[12]="15104547520";
char k2[12]="15104547520";
void main()
{
p=strcmp(k1,k2);
printf("%d\n",p);
}
注:通過改變k1,k2,看看輸出結果有什麼不同
(5).strncmp
函式名: strncmp
功 能: 串比較
用 法: int strncmp(char *str1, char *str2, int maxlen);
說明:比較字串str1和str2的大小,如果str1小於str2,返回值就<0,反之如果str1大於str2,返回值就>0,如果str1等於str2,返回值就=0,maxlen指的是str1與str2的比較的字元數。此函式功能即比較字串str1和str2的前maxlen個字元。
(6).strcpy
原型宣告:extern char *strcpy(char *dest,char *src);
標頭檔案:string.h
功能:把src所指由NUL結束的字串複製到dest所指的陣列中。
說明:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。
返回指向dest的指標
(7).strncpy
strncpy:字串複製
原型:char * strncpy(char *dest, char *src, size_t n);
功能:將字串src中最多n個字元複製到字元陣列dest中(它並不像strcpy一樣遇到NULL才停止複製,而是等湊夠n個字元才開始複製),返回指向dest的指標。
說明:
如果n > dest串長度,dest棧空間溢位產生崩潰異常。
否則:
1)src串長度<=dest串長度,(這裡的串長度包含串尾NULL字元)
如果n=(0, src串長度),src的前n個字元複製到dest中。但是由於沒有NULL字元,所以直接訪問dest串會發生棧溢位的異常情況。
如果n = src串長度,與strcpy一致。
如果n = dest串長度,[0,src串長度]處存放於desk字串,(src串長度, dest串長度]處存放NULL。
2)src串長度>dest串長度
如果n =dest串長度,則dest串沒有NULL字元,會導致輸出會有亂碼。如果不考慮src串複製完整性,可以將dest最後一字元置為NULL。
綜上,一般情況下,使用strncpy時,建議將n置為dest串長度(除非你將多個src串都複製到dest陣列,並且從dest尾部反向操作),複製完畢後,為保險起見,將dest串最後一字元置NULL,避免發生在第2)種情況下的輸出亂碼問題。當然嘍,無論是strcpy還是strncpy,保證src串長度<dest串長度才是最重要的
(8).strlen
原型:extern unsigned int strlen(char *s);,在Visual C++ 6.0中,原型為size_t strlen( const char *string );,其中size_t實際上是unsigned int,在VC6.0中可以看到這樣的程式碼:typedef unsigned int size_t;。
標頭檔案:string.h
格式:strlen (字元陣列名)
功能:計算字串s的(unsigned int型)長度,不包括'\0'在內
說明:返回s的長度,不包括結束符NULL。
(9).strpos
strpos() 函式返回字串在另一個字串中第一次出現的位置。
如果沒有找到該字串,則返回 false
(10).strrchr()
strrchr() 函式查詢字元在指定字串中從後面開始的第一次出現的位置,如果成功,則返回指向該位置的指標,如果失敗,則返回 false
(11).strrpos()
strrpos() 函式查詢字串在另一個字串中最後一次出現的位置。
如果成功,則返回位置,否則返回 false
(12).strspn
strspn(返回字串中第一個不在指定字串中出現的字元下標)
表頭檔案 #include<string.h>
定義函式 size_t strspn (const char *s,const char * accept);
函式說明 strspn()從引數s 字串的開頭計算連續的字元,而這些字元都完全是accept 所指字串中的字元。簡單的說,若strspn()返回的數值為n,則代表字串s 開頭連續有n 個字元都是屬於字串accept內的字元。
返回值 返回字串s開頭連續包含字串accept內的字元數目
(13).strcspn
原型:size_t strcspn(const char *s1,const char *s2);
相關標頭檔案:#include <string.h>
功能:順序在字串s1中搜尋與s2中字元的第一個相同字元,返回這個字元在S1中第一次出現的位置。
說明:(返回第一個出現的字元在s1中的下標值,亦即在s1中出現而s2中沒有出現的子串的長度。)
簡單地說,若strcspn()返回的數值為n,則代表字串s1開頭連續有n個字元都不含字串s2內的字元。
(14).strpbrk
用法:#include <string.h>
功能:在字串s1中尋找字串s2中任何一個字元相匹配的第一個字元的位置,空字元NULL不包括在內。
說明:返回指向s1中第一個相匹配的字元的指標,如果沒有匹配字元則返回空指標NULL
(15). strstr
函式名: strstr
功 能: 在字串中查詢指定字串的第一次出現
用 法: char *strstr(char *str1, char *str2);
strstr原型:extern char *strstr(char *haystack, char *needle);
標頭檔案:#include <string.h>
功能:從字串haystack中尋找needle第一次出現的位置(不比較結束符NULL)。
說明:返回指向第一次出現needle位置的指標,如果沒找到則返回NULL
(16).strtok
原型 char *strtok(char *s, const char *delim);
功能
分解字串為一組字串。s為要分解的字串,delim為分隔符字串。
說明
strtok()用來將字串分割成一個個片段。引數s指向欲分割的字串,引數delim則為分割字串,當strtok()在引數s的字串中發現到引數delim的分割字元時則會將該字元改為\0 字元。在第一次呼叫時,strtok()必需給予引數s字串,往後的呼叫則將引數s設定成NULL。每次呼叫成功則返回被分割出片段的指標。
返回值
從s開頭開始的一個個被分割的串。當沒有被分割的串時則返回NULL。
所有delim中包含的字元都會被濾掉,並將被濾掉的地方設為一處分割的節點
(17).memcmp
原型:int memcmp(const void *buf1, const void *buf2, unsigned int count);
用法:#include <string.h>或#include<memory.h>
功能:比較記憶體區域buf1和buf2的前count個位元組。
說明:
當buf1<buf2時,返回值<0
當buf1=buf2時,返回值=0
當buf1>buf2時,返回值>0
(18).memcpy
函式原型 void *memcpy(void *dest, const void *src, size_t n);
功能
由src指向地址為起始地址的連續n個位元組的資料複製到以destin指向地址為起始地址的空間內。
所需標頭檔案
#include <string.h>
返回值
函式返回一個指向dest的指標。
說明
1.source和destin所指記憶體區域不能重疊,函式返回指向destin的指標。
2.與strcpy相比,memcpy並不是遇到'\0'就結束,而是一定會拷貝完n個位元組。
3.如果目標陣列destin本身已有資料,執行memcpy()後,將覆蓋原有資料(最多覆蓋n)。如果要追加資料,則每次執行memcpy後,要將目標陣列地址增加到你要追加資料的地址。
//注意,source和destin都不一定是陣列,任意的可讀寫的空間均可
(19).memchr
原型:extern void *memchr(void *buf, char ch, unsigned int count);
用法:#include <string.h>
功能:從buf所指記憶體區域的前count個位元組查詢字元ch。
說明:當第一次遇到字元ch時停止查詢。如果成功,返回指向字元ch的指標;否則返回NULL
(20).memccpy
原型:extern void *memccpy(void *dest, void *src, unsigned char c, unsigned int count);
引數:
dest Pointer to the destination.
src Pointer to the source.
c Last character to copy.
count Number of characters.
用法:#include <string.h>
功能:由src所指記憶體區域複製不多於count個位元組到dest所指記憶體區域,如果遇到字元c則停止複製。
返回值:如果c沒有被複制,則返回NULL,否則,返回一個指向緊接著dest區域後的字元的指標
(21).memmove
原型:void *memmove( void* dest, const void* src, size_t count );
用法: #include <string.h>或#include <memory.h>
功能:由src所指記憶體區域複製count個位元組到dest所指記憶體區域。
說明:src和dest所指記憶體區域可以重疊,但複製後dest內容會被更改。函式返回指向dest的指標
(22).memset
需要的標頭檔案 <memory.h> or <string.h>
函式原型
void *memset(void *s, int ch, unsigned n);memset原型 (please type "man memset" in your shell)
void *memset(void *s, int c, size_t n);
memset:作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快方法