|
bcmp(比較內存內容) |
相關函數
|
bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp |
表頭文件
|
#include<string.h> |
定義函數
|
int bcmp ( const void *s1,const
void * s2,int n); |
函數說明
|
bcmp()用來比較s1和s2所指的內存區間前n個字節,若參數n為0,則返回0。 |
返回值
|
若參數s1 和s2 所指的內存內容都完全相同則返回0 值,否則返回非零值。 |
附加說明
|
建議使用memcmp()取代。 |
範例
|
參考memcmp()。 |
|
bcopy(拷貝內存內容) |
相關函數
|
memccpy,memcpy,memmove,strcpy,ctrncpy |
表頭文件
|
#include <string.h> |
定義函數
|
void bcopy ( const void *src,void
*dest ,int n); |
函數說明
|
bcopy()與memcpy()一樣都是用來拷貝src所指的內存內容前n個字節到dest所指的地址,不過參數src與dest在傳給函數時是相反的位置。 |
返回值
|
|
附加說明
|
建議使用memcpy()取代 |
範例
|
#include<string.h> main() { char dest[30]=”string(a)”; char src[30]=”string\0string”; int i; bcopy(src,dest,30);/* src指針放在前*/ printf(bcopy(): “) for(i=0;i<30;i++) printf(“%c”,dest[i]); memcpy(dest src,30); /*dest指針放在錢*/ printf(‘\nmemcpy() : “); for(i=0;i<30;i++) printf(“%c”,dest[i]); |
執行
|
bcopy() : string string memcpy() :string sring |
|
bzero(將一段內存內容全清為零) |
相關函數
|
memset,swab |
表頭文件
|
#include<string.h> |
定義函數
|
void bzero(void *s,int n); |
函數說明
|
bzero()會將參數s所指的內存區域前n個字節,全部設為零值。相當於調用memset((void*)s,0,size_tn); |
返回值
|
|
附加說明
|
建議使用memset取代 |
範例
|
參考memset()。 |
|
index(查找字符串中第一個出現的指定字符) |
相關函數
|
rindex,srechr,strrchr |
表頭文件
|
#include<string.h> |
定義函數
|
char * index( const char *s, int
c); |
函數說明
|
index()用來找出參數s字符串中第一個出現的參數c地址,然後將該字符出現的地址返回。字符串結束字符(NULL)也視為字符串一部分。 |
返回值
|
如果找到指定的字符則返回該字符所在地址,否則返回0。 |
範例
|
#include<string.h> main() { char *s =”0123456789012345678901234567890”; char *p; p =index(s,’5’); printf(%s\n”,p); } |
執行
|
5.68E+25 |
|
memccpy(拷貝內存內容) |
相關函數
|
bcopy,memcpy,memmove,strcpy,strncpy |
表頭文件
|
#include<string.h> |
定義函數
|
void * memccpy(void *dest, const
void * src, int c,size_t n); |
函數說明
|
memccpy()用來拷貝src所指的內存內容前n個字節到dest所指的地址上。與memcpy()不同的是,memccpy()會在複製時檢查參數c是否出現,若是則返回dest中值為c的下一個字節地址。 |
返回值
|
返回指向dest中值為c的下一個字節指針。返回值為0表示在src所指內存前n個字節中沒有值為c的字節。 |
範例
|
#include<string.h> main() { char a[]="string[a]"; char b[]="string(b)"; memccpy(a,b,'B',sizeof(b)); printf("memccpy():%s\n",a); } |
執行
|
memccpy():string(b) |
|
memchr(在某一內存範圍中查找一特定字符) |
相關函數
|
index,rindex,strchr,strpbrk,strrchr,strsep,strspn,strstr |
表頭文件
|
#include<string.h> |
定義函數
|
void * memchr(const void *s,int
c,size_t n); |
函數說明
|
memchr()從頭開始搜尋s所指的內存內容前n個字節,直到發現第一個值為c的字節,則返回指向該字節的指針。 |
返回值
|
如果找到指定的字節則返回該字節的指針,否則返回0。 |
範例
|
#include <string.h> main() { char *s="0123456789012345678901234567890"; char *p; p=memchr(s,'5',10); printf("%s\n",p); } |
執行
|
5.68E+25 |
|
memcmp(比較內存內容) |
相關函數
|
bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp |
表頭文件
|
#include<string.h> |
定義函數
|
int memcmp (const void *s1,const
void *s2,size_t n); |
函數說明
|
memcmp()用來比較s1和s2所指的內存區間前n個字符。字符串大小的比較是以ASCII碼表上的順序來決定,次順序亦為字符的值。memcmp()首先將s1第一個字符值減去s2第一個字符的值,若差為0則再繼續比較下個字符,若差值不為0則將差值返回。例如,字符串"Ac"和"ba"比較則會返回字符'A'(65)和'b'(98)的差值(-33)。 |
返回值
|
若參數s1和s2所指的內存內容都完全相同則返回0值。s1若大於s2則返回大於0的值。s1若小於s2則返回小於0的值。 |
範例
|
#include<string.h> main() { char *a ="aBcDeF"; char *b="AbCdEf"; char *c="aacdef"; char *d="aBcDeF"; printf("memcmp(a,b):%d\n",memcmp((void*)a,(void*) b,6)); printf("memcmp(a,c):%d\n",memcmp((void*)a,(void*) c,6)); printf("memcmp(a,d):%d\n",memcmp((void*)a,(void*) d,6)); |
執行
|
memcmp(a,b):1 /*字符串a>字符串b,返回1*/ memcmp(a,c):-1 /* 字符串a<字符串c,返回-1*/ memcmp(a,d):0 /*字符串a=字符串d,返回0*/ |
|
memcpy(拷貝內存內容) |
相關函數
|
bcopy,memccpy,memcpy,memmove,strcpy,strncpy |
表頭文件
|
#include<string.h> |
定義函數
|
void * memcpy (void * dest ,const
void *src, size_t n); |
函數說明
|
memcpy()用來拷貝src所指的內存內容前n個字節到dest所指的內存地址上。與strcpy()不同的是,memcpy()會完整的複製n個字節,不會因為遇到字符串結束'\0'而結束。 |
返回值
|
返回指向dest的指針。 |
附加說明
|
指針src和dest所指的內存區域不可重疊。 |
範例
|
#include<string.h> main() { char a[30]="string (a)"; char b[30]="string\0string"; int i; strcpy(a,b); printf("strcpy():"); for(i=0;i<30;i++) printf("%c",a[i]); memcpy(a,b,30); printf("\nmemcpy() :"); for(i=0;i<30;i++) printf("%c",a[i]); } |
執行
|
strcpy() : string a ) memcpy() : string string |
|
memmove(拷貝內存內容) |
相關函數
|
bcopy,memccpy,memcpy,strcpy,strncpy |
表頭文件
|
#include<string.h> |
定義函數
|
void * memmove(void *dest,const
void *src,size_t n); |
函數說明
|
memmove()與memcpy()一樣都是用來拷貝src所指的內存內容前n個字節到dest所指的地址上。不同的是,當src和dest所指的內存區域重疊時,memmove()仍然可以正確的處理,不過執行效率上會比使用memcpy()略慢些。 |
返回值
|
返回指向dest的指針。 |
附加說明
|
指針src和dest所指的內存區域可以重疊。 |
範例
|
參考memcpy()。 |
|
memset(將一段內存空間填入某值) |
相關函數
|
bzero,swab |
表頭文件
|
#include<string.h> |
定義函數
|
void * memset (void *s ,int c,
size_t n); |
函數說明
|
memset()會將參數s所指的內存區域前n個字節以參數c填入,然後返回指向s的指針。在編寫程序時,若需要將某一數組作初始化,memset()會相當方便。 |
返回值
|
返回指向s的指針。 |
附加說明
|
參數c雖聲明為int, 但必須是unsigned char
,所以範圍在0到255之間。 |
範例
|
#include <string.h> main() { char s[30]; memset (s,'A',sizeof(s)); s[30]='\0'; printf("%s\n",s); } |
執行
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |
|
rindex(查找字符串中最後一個出現的指定字符) |
相關函數
|
index,memchr,strchr,strrchr |
表頭文件
|
#include<string.h> |
定義函數
|
char * rindex( const char *s,int
c); |
函數說明
|
rindex()用來找出參數s字符串中最後一個出現的參數c地址,然後將該字符出現的地址返回。字符串結束字符(NULL)也視為字符串一部分。 |
返回值
|
如果找到指定的字符則返回該字符所在的地址,否則返回0。 |
範例
|
#include <string.h> mian() { char *s ="0123456789012345678901234567890"; char *p; p=rindex(s,'5'); printf("%s\n",p); } |
執行
|
567890 |
|
strcasecmp(忽略大小寫比較字符串) |
相關函數
|
bcmp,memcmp,strcmp,strcoll,strncmp |
表頭文件
|
#include<string.h> |
定義函數
|
int strcasecmp (const char *s1,
const char *s2); |
函數說明
|
strcasecmp()用來比較參數s1和s2字符串,比較時會自動忽略大小寫的差異。 |
返回值
|
若參數s1和s2字符串相同則返回0。s1長度大於s2長度則返回大於0
的值,s1 長度若小於s2 長度則返回小於0的值。 |
範例
|
#include <string.h> main() { char *a="aBcDeF"; char *b="AbCdEf"; if(!strcasecmp(a,b)) printf("%s=%s\n",a,b); } |
執行
|
aBcDeF=AbCdEf |
|
strcat(連接兩字符串) |
相關函數
|
bcopy,memccpy,memcpy,strcpy,strncpy |
表頭文件
|
#include <string.h> |
定義函數
|
char *strcat (char *dest,const
char *src); |
函數說明
|
strcat()會將參數src字符串拷貝到參數dest所指的字符串尾。第一個參數dest要有足夠的空間來容納要拷貝的字符串。 |
返回值
|
返回參數dest的字符串起始地址 |
範例
|
#include <string.h.> main() { char a[30]="string(1)"; char b[]="string(2)"; printf("before strcat() : %s\n",a); printf("after strcat() : %s\n",strcat(a,b)); } |
執行
|
before strcat () : string(1) after strcat () : string(1)string(2) |
|
strchr(查找字符串中第一個出現的指定字符) |
相關函數
|
index,memchr,rinex,strbrk,strsep,strspn,strstr,strtok |
表頭文件
|
#include<string.h> |
定義函數
|
char * strchr (const char *s,int
c); |
函數說明
|
strchr()用來找出參數s字符串中第一個出現的參數c地址,然後將該字符出現的地址返回。 |
返回值
|
如果找到指定的字符則返回該字符所在地址,否則返回0。 |
範例
|
#include<string.h> main() { char *s=0123456789012345678901234567890”; char *p; p=strchr(s,'5'); printf("%s\n",p); } |
執行
|
5.68E+25 |
|
strcmp(比較字符串) |
相關函數
|
bcmp,memcmp,strcasecmp,strncasecmp,strcoll |
表頭文件
|
#include<string.h> |
定義函數
|
int strcmp(const char *s1,const
char *s2); |
函數說明
|
strcmp()用來比較參數s1和s2字符串。字符串大小的比較是以ASCII
碼表上的順序來決定,此順序亦為字符的值。strcmp()首先將s1第一個字符值減去s2第一個字符值,若差值為0則再繼續比較下個字符,若差值不為0則將差值返回。例如字符串"Ac"和"ba"比較則會返回字符"A"(65)和'b'(98)的差值(-33)。 |
返回值
|
若參數s1和s2字符串相同則返回0。s1若大於s2則返回大於0的值。s1若小於s2則返回小於0
的值。 |
範例
|
#include<string.h> main() { char *a="aBcDeF"; char *b="AbCdEf"; char *c="aacdef"; char *d="aBcDeF"; printf("strcmp(a,b) : %d\n",strcmp(a,b)); printf("strcmp(a,c) : %d\n",strcmp(a,c)); printf("strcmp(a,d) : %d\n",strcmp(a,d)); } |
執行
|
strcmp(a,b) : 32 strcmp(a,c) :-31 strcmp(a,d) : 0 |
|
strcoll(採用目前區域的字符排列次序來比較字符串) |
相關函數
|
strcmp,bcmp,memcmp,strcasecmp,strncasecmp |
表頭文件
|
#include<string.h> |
定義函數
|
int strcoll( const char *s1, const
char *s2); |
函數說明
|
strcoll()會依環境變量LC_COLLATE所指定的文字排列次序來比較s1和s2
字符串。 |
返回值
|
若參數s1和s2字符串相同則返回0。s1若大於s2則返回大於0的值。s1若小於s2則返回小於0
的值。 |
附加說明
|
若LC_COLLATE為"POSIX"或"C",則strcoll()與strcmp()作用完全相同。 |
範例
|
參考strcmp()。 |
|
strcpy(拷貝字符串) |
相關函數
|
bcopy,memcpy,memccpy,memmove |
表頭文件
|
#include<string.h> |
定義函數
|
char *strcpy(char *dest,const
char *src); |
函數說明
|
strcpy()會將參數src字符串拷貝至參數dest所指的地址。 |
返回值
|
返回參數dest的字符串起始地址。 |
附加說明
|
如果參數dest所指的內存空間不夠大,可能會造成緩衝溢出(buffer
Overflow)的錯誤情況,在編寫程序時請特別留意,或者用strncpy()來取代。 |
範例
|
#include<string.h> main() { char a[30]="string(1)"; char b[]="string(2)"; printf("before strcpy() :%s\n",a); printf("after strcpy() :%s\n",strcpy(a,b)); } |
執行
|
before strcpy() :string(1) after strcpy() :string(2) |
|
strcspn(返回字符串中連續不含指定字符串內容的字符數) |
相關函數
|
strspn |
表頭文件
|
#inclued<string.h> |
定義函數
|
size_t strcspn ( const char *s,const
char * reject); |
函數說明
|
strcspn()從參數s字符串的開頭計算連續的字符,而這些字符都完全不在參數reject
所指的字符串中。簡單地說,若strcspn()返回的數值為n,則代表字符串s開頭連續有n個字符都不含字符串reject內的字符。 |
返回值
|
返回字符串s開頭連續不含字符串reject內的字符數目。 |
範例
|
#include <string.h> main() { char *str="Linux was first developed for 386/486-based pcs."; printf("%d\n",strcspn(str," ")); printf("%d\n",strcspn(str,"/-")); printf("%d\n",strcspn(str,"1234567890")); } |
執行
|
5 /*只計算到“ ”的出現,所以返回“Linux”的長度*/ 33 /*計算到出現“/”或“-”,所以返回到“6”的長度*/ 30 /* 計算到出現數字字符為止,所以返回“3”出現前的長度*/ |
|
strdup(複製字符串) |
相關函數
|
calloc,malloc,realloc,free |
表頭文件
|
#include<string.h> |
定義函數
|
char * strdup( const char *s); |
函數說明
|
strdup()會先用maolloc()配置與參數s字符串相同的空間大小,然後將參數s字符串的內容複製到該內存地址,然後把該地址返回。該地址最後可以利用free()來釋放。 |
返回值
|
返回一字符串指針,該指針指向複製後的新字符串地址。若返回NULL表示內存不足。 |
範例
|
#include<string.h> main() { char a[]="strdup"; char *b; b=strdup(a); printf("b[ ]=\"%s\"\n",b); } |
執行
|
b[ ]="strdup" |
|
strlen(返回字符串長度) |
相關函數
|
|
表頭文件
|
#include<string.h> |
定義函數
|
size_t strlen (const char *s); |
函數說明
|
strlen()用來計算指定的字符串s的長度,不包括結束字符"\0"。 |
返回值
|
返回字符串s的字符數。 |
範例
|
/*取得字符串str的長度*/ #include<string.h> main() { char *str = "12345678"; printf("str length = %d\n", strlen(str)); } |
執行
|
str length = 8 |
|
strncasecmp(忽略大小寫比較字符串) |
相關函數
|
bcmp,memcmp,strcmp,strcoll,strncmp |
表頭文件
|
#include<string.h> |
定義函數
|
int strncasecmp(const char *s1,const
char *s2,size_t n); |
函數說明
|
strncasecmp()用來比較參數s1和s2字符串前n個字符,比較時會自動忽略大小寫的差異。 |
返回值
|
若參數s1和s2 字符串相同則返回0。s1 若大於s2則返回大於0的值,s1若小於s2則返回小於0
的值。 |
範例
|
#include<string.h> main() { char *a="aBcDeF"; char *b="AbCdEf"; if(!strncasecmp(a,b)) printf("%s =%s\n",a,b); } |
執行
|
aBcDef=AbCdEf |
|
strncat(連接兩字符串) |
相關函數
|
bcopy,memccpy,memecpy,strcpy,strncpy |
表頭文件
|
#inclue <string.h> |
定義函數
|
char * strncat(char *dest,const
char *src,size_t n); |
函數說明
|
strncat()會將參數src字符串拷貝n個字符到參數dest所指的字符串尾。第一個參數dest要有足夠的空間來容納要拷貝的字符串。 |
返回值
|
返回參數dest的字符串起始地址。 |
範例
|
#include <string.h> main() { char a[30]="string(1)"; char b[]="string(2)"; printf("before strnact() :%s\n", a); printf("after strncat() :%s\n", strncat(a,b,6)); } |
執行
|
before strnact() : string(1) after strncat() : string(1) string |
|
strncpy(拷貝字符串) |
相關函數
|
bcopy,memccpy,memcpy,memmove |
表頭文件
|
#include<string.h> |
定義函數
|
char * strncpy(char *dest,const
char *src,size_t n); |
函數說明
|
strncpy()會將參數src字符串拷貝前n個字符至參數dest所指的地址。 |
返回值
|
返回參數dest的字符串起始地址。 |
範例
|
#inclue <string.h> main() { char a[30]="string(1)"; char b[]="string(2)"; printf("before strncpy() : %s\n",a); printf("after strncpy() : %s\n",strncpy(a,b,6)); } |
執行
|
before strncpy() : string(1) after strncpy() : string(1) |
|
strpbrk(查找字符串中第一個出現的指定字符) |
相關函數
|
index,memchr,rindex,strpbrk,strsep,strspn,strstr,strtok |
表頭文件
|
#include <include.h> |
定義函數
|
char *strpbrk(const char *s,const
char *accept); |
函數說明
|
strpbrk()用來找出參數s 字符串中最先出現存在參數accept
字符串中的任意字符。 |
返回值
|
如果找到指定的字符則返回該字符所在地址,否則返回0。 |
範例
|
#include <string.h> main() { char *s="0123456789012345678901234567890"; char *p; p=strpbrk(s,"a1 839"); /*1會最先在s字符串中找到*/ printf("%s\n",p); p=strprk(s,"4398");/*3 會最先在s 字符串中找到*/ printf("%s\n",p); |
執行
|
1.23E+29 |
|
strrchr(查找字符串中最後出現的指定字符) |
相關函數
|
index,memchr,rindex,strpbrk,strsep,strspn,strstr,strtok |
表頭文件
|
#include<string.h> |
定義函數
|
char * strrchr(const char *s,
int c); |
函數說明
|
strrchr()用來找出參數s字符串中最後一個出現的參數c地址,然後將該字符出現的地址返回。 |
返回值
|
如果找到指定的字符則返回該字符所在地址,否則返回0。 |
範例
|
#include<string.h> main() { char *s="0123456789012345678901234567890"; char *p; p=strrchr(s,'5'); printf("%s\n",p); } |
執行
|
567890 |
|
strspn(返回字符串中連續不含指定字符串內容的字符數) |
相關函數
|
strcspn,strchr,strpbrk,strsep,strstr |
表頭文件
|
#include<string.h> |
定義函數
|
size_t strspn (const char *s,const
char * accept); |
函數說明
|
strspn()從參數s 字符串的開頭計算連續的字符,而這些字符都完全是accept
所指字符串中的字符。簡單的說,若strspn()返回的數值為n,則代表字符串s 開頭連續有n 個字符都是屬於字符串accept內的字符。 |
返回值
|
返回字符串s開頭連續包含字符串accept內的字符數目。 |
範例
|
#include<string.h> main() { char *str="Linux was first developed for 386/486-based PCs."; char *t1="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; printf("%d\n",strspn(str,t1)); } |
執行
|
5 /*計算大小寫字母。不包含“ ”,所以返回Linux的長度。*/ |
|
strstr(在一字符串中查找指定的字符串) |
相關函數
|
index,memchr,rindex,strchr,strpbrk,strsep,strspn,strtok |
表頭文件
|
#include<string.h> |
定義函數
|
char *strstr(const char *haystack,const
char *needle); |
函數說明
|
strstr()會從字符串haystack 中搜尋字符串needle,並將第一次出現的地址返回。 |
返回值
|
返回指定字符串第一次出現的地址,否則返回0。 |
範例
|
#include<string.h> main() { char * s="012345678901234567890123456789"; char *p; p= strstr(s,"901"); printf("%s\n",p); } |
執行
|
9.01E+21 |
|
strtok(分割字符串) |
相關函數
|
index,memchr,rindex,strpbrk,strsep,strspn,strstr |
表頭文件
|
#include<string.h> |
定義函數
|
char * strtok(char *s,const char
*delim); |
函數說明
|
strtok()用來將字符串分割成一個個片段。參數s指向欲分割的字符串,參數delim則為分割字符串,當strtok()在參數s的字符串中發現到參數delim的分割字符時則會將該字符改為\0
字符。在第一次調用時,strtok()必需給予參數s字符串,往後的調用則將參數s設置成NULL。每次調用成功則返回下一個分割後的字符串指針。 |
返回值
|
返回下一個分割後的字符串指針,如果已無從分割則返回NULL。 |
範例
|
#include<string.h> main() { char s[]="ab-cd : ef;gh :i-jkl;mnop;qrs-tu: vwx-y;z"; char *delim="-: "; char *p; printf("%s ";strtok(s,delim)); while((p=strtok(NULL,delim)))printf("%s ",p); printf("\n"); } |
執行
|
ab cd ef;gh i jkl;mnop;qrs tu
vwx y;z /*-與:字符已經被\0 字符取代*/ |
|