![LinuxC函數(shù)參考手冊_第1頁](http://file4.renrendoc.com/view/ef8250251490de3dc24e57163103b72c/ef8250251490de3dc24e57163103b72c1.gif)
![LinuxC函數(shù)參考手冊_第2頁](http://file4.renrendoc.com/view/ef8250251490de3dc24e57163103b72c/ef8250251490de3dc24e57163103b72c2.gif)
![LinuxC函數(shù)參考手冊_第3頁](http://file4.renrendoc.com/view/ef8250251490de3dc24e57163103b72c/ef8250251490de3dc24e57163103b72c3.gif)
![LinuxC函數(shù)參考手冊_第4頁](http://file4.renrendoc.com/view/ef8250251490de3dc24e57163103b72c/ef8250251490de3dc24e57163103b72c4.gif)
![LinuxC函數(shù)參考手冊_第5頁](http://file4.renrendoc.com/view/ef8250251490de3dc24e57163103b72c/ef8250251490de3dc24e57163103b72c5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
范例范例isalnum(測試字符是否為英文或數(shù)字)isalpha,isdigit,islower,isupper#include<ctype.h>intisalnum(intc)檢查參數(shù)c是否為英文字母或阿拉伯?dāng)?shù)字,在標(biāo)準(zhǔn)c中相當(dāng)于使用(isalpha(c)||isdigit(c))做測試。若參數(shù)c為字母或數(shù)字,則返回TRUE,否則返回NULL(0)。此為宏定義,非真正函數(shù)。/*找出str字符串中為英文字母或數(shù)字的字符*/#include<ctype.h>main(){charstr[]=”123c@#FDsP[e?”;inti;for(i=0;str[i]!=0;i++)if(isalnum(str[i]))printf(“%cisanalphanumericcharacter\n",str[i]);}isanapphabeticcharacterisanapphabeticcharacterisanapphabeticcharactercisanapphabeticcharacterFisanapphabeticcharacterDisanapphabeticcharactersisanapphabeticcharacterPisanapphabeticcharactereisanapphabeticcharacter
isalpha(測試字符是否為英文字母)相關(guān)函數(shù)isalnum,islower,isupper#include<ctype.h>intisalpha(intc)檢查參數(shù)c是否為英文字母,在標(biāo)準(zhǔn)c中相當(dāng)于使用(isupper(c)llislower(c))做測試。若參數(shù)c為英文字母,則返回TRUE,否則返回NULL(0)。此為宏定義,非真正函數(shù)表頭文件定義函數(shù)函數(shù)說明返回值附加說明范例/*找出str字符串中為英文字母的字符*/#include<ctype.h>main(){charstr[]=”123c@#FDsP[e?”;inti;for(i=0;str[i]!=0;i++)if(isalpha(str[i]))printf(“%cisanalphanumericcharacter\n",str[i]);}執(zhí)行cisanapphabeticcharacterFisanapphabeticcharacterDisanapphabeticcharactersisanapphabeticcharacterPisanapphabeticcharactereisanapphabeticcharacteriscntrl(iscntrl(測試字符是否為ASCII碼的控制字符)isascii(測試字符是否為ASCII碼字符)相關(guān)函數(shù)iscntrl表頭文件#include<ctype.h>定義函數(shù)intisascii(intc);函數(shù)說明檢查參數(shù)c是否為ASCII碼字符,也就是判斷c的范圍是否在0到127之間。返回值若參數(shù)c為ASCII碼字符,則返回TRUE,否則返回NULL(0)。附加說明此為宏定義,非真正函數(shù)。范例/*判斷inti是否具有對映的ASCII碼字符*/#include<ctype.h>main(){inti;for(i=125;ivl30;i++)if(isascii(i))printf("%disanasciicharacter:%c\n",i,i);elseprintf("%disnotanasciicharacter\n",i);}執(zhí)行isanasciicharacter:}isanasciicharacter:-isanasciicharacter:isnotanasciicharacterisnotanasciicharacter相關(guān)函數(shù)isascii表頭文件#include<ctype.h>定義函數(shù)intiscntrl(intc);函數(shù)說明檢查參數(shù)c是否為ASCII控制碼,也就是判斷c的范圍是否在0到30之間返回值若參數(shù)c為ASCII控制碼,則返回TRUE,否則返回NULL(0)。附加說明此為宏定義,非真正函數(shù)。isdigit(測試字符是否為阿拉伯?dāng)?shù)字)相關(guān)函數(shù)isxdigit#include<ctype.h>intisdigit(intc)檢查參數(shù)c是否為阿拉伯?dāng)?shù)字0到9。若參數(shù)c為阿拉伯?dāng)?shù)字,則返回TRUE,否則返回NULL(0)。此為宏定義,非真正函數(shù)。表頭文件定義函數(shù)函數(shù)說明返回值附加說明范例/*找出str字符串中為阿拉伯?dāng)?shù)字的字符*/#include<ctype.h>main(){charstr[]="123@#FDsP[e?";inti;for(i=0;str[i]!=0;i++)if(isdigit(str[i]))printf("%cisandigitcharacter\n",str[i]);
執(zhí)行isandigitcharacterisandigitcharacterisandigitcharacterisgraphis(測試字符是否為可打印字符)相關(guān)函數(shù)isprint表頭文件#include<ctype.h>定義函數(shù)intisgraph(intc)相關(guān)函數(shù)isprint表頭文件#include<ctype.h>定義函數(shù)intisgraph(intc)函數(shù)說明檢查參數(shù)c是否為可打印字符,若c所對映的ASCII碼可打印,且非空格字符則返回TRUE。函數(shù)說明返回值 若參數(shù)c為可打印字符,則返回TRUE,否則返回NULL(0)。附加說明 此為宏定義,非真正函數(shù)范例/*判斷str字符串中哪些為可打印字符*/#include<ctype.h>main(){charstr[]="a5@;";inti;for(i=0;str[i]!=0;i++)if(isgraph(str[i]))printf("str[%d]isprintablecharacter:%d\n",i,str[i]);執(zhí)行str[0]isprintablecharacter:astr[1]isprintablecharacter:5str[3]isprintablecharacter:@str[4]isprintablecharacter:;范例islower(測試字符是否為小寫字母)范例isalpha,isupper#include<ctype.h>intislower(intc)檢查參數(shù)c是否為小寫英文字母。若參數(shù)c為小寫英文字母,則返回TRUE,否則返回NULL(0)。此為宏定義,非真正函數(shù)。#include<ctype.h>main(){charstr[]="123@#FDsP[e?”;inti;for(i=0;str[i]!=0;i++)if(islower(str[i]))printf("%cisalower-casecharacter\n",str[i]);}執(zhí)行cisalower-casecharactersisalower-casecharactereisalower-casecharacterisprint(測試字符是否為可打印字符)isgraph#include<ctype.h>intisprint(intc);檢查參數(shù)c是否為可打印字符,若c所對映的ASCII碼可打印,其中包含空格字符,則返回TRUE。
返回值 若參數(shù)c為可打印字符,則返回TRUE,否則返回NULL(0)。附加說明 此為宏定義,非真正函數(shù)。范例/*判斷str字符串中哪些為可打印字符包含空格字符*/#include<ctype.h>main(){charstr[]="a5@;";inti;for(i=0;str[i]!=0;i++)if(isprint(str[i]))printf("str[%d]isprintablecharacter:%d\n",i,str[i]);執(zhí)行str[0]isprintablecharacter:astr[1]isprintablecharacter:5str[2]isprintablecharacter:str[3]isprintablecharacter:@str[4]isprintablecharacter:;isspace(測試字符是否為空格字符)相關(guān)函數(shù)isgraph表頭文件#include<ctype.h>定義函數(shù)intisspace相關(guān)函數(shù)isgraph表頭文件#include<ctype.h>定義函數(shù)intisspace(intc)檢查參數(shù)c是否為空格字符,也就是判斷是否為空格(”)、定位字函數(shù)說明 符('\t')、CRC\r')、換行(偵)、垂直定位字符('\v')或翻頁('\f')的情況。返回值 若參數(shù)c為空格字符,則返回TRUE,否則返回NULL(0)。附加說明 此為宏定義,非真正函數(shù)范例
/*將字符串str[]中內(nèi)含的空格字符找出,并顯示空格字符的ASCII碼*/#include<ctype.h>main(){charstr="123c@#FD\tsP[e?\n";inti;for(i=0;str[i]!=0;i++)if(isspace(str[i]))printf("str[%d]isawhite-spacecharacter:%d\n",i,str[i]);}執(zhí)行str[4]isawhite-spacecharacter:32str[7]isawhite-spacecharacter:32str[10]isawhite-spacecharacter:9 /*\t*/str[16]isawhite-spacecharacter:10 /*\t*/ispunct(測試字符是否為標(biāo)點符號或特殊符號)相關(guān)函數(shù)表頭文件定義函數(shù)函數(shù)說明返回值附加說明isspace相關(guān)函數(shù)表頭文件定義函數(shù)函數(shù)說明返回值附加說明isspace,isdigit,isalpha#inlude<ctype.h>intispunct(intc)檢查參數(shù)c是否為標(biāo)點符號或特殊符號。返回TRUE也就是代表參數(shù)c為非空格、非數(shù)字和非英文字母。若參數(shù)c為標(biāo)點符號或特殊符號,則返回TRUE,否則返回NULL(0)。此為宏定義,非真正函數(shù)范例/*列出字符串str中的標(biāo)點符號或特殊符號*/#include<ctype.h>main(){charstr[]="123c@#FDsP[e?";inti;for(i=0;str[i]!=0;i++)if(ispunct(str[i]))printf("%c\n",str[i]);
執(zhí)行@#[?isupper(測試字符是否為大與英文字母)相關(guān)函數(shù)isalpha,islower表頭文件#include<ctype.h>定義函數(shù)intisupper(intc)函數(shù)說明檢查參數(shù)c是否為大與英文字母。返回值若參數(shù)c為大與英文字母,則返回TRUE,否則返回NULL(0)。附加說明此為宏定義,非真正函數(shù)范例/*找出字符串str中為大寫英文字母的字符*/#include<ctype.h>main(){charstr[]="123c@#FDsP[e?”;inti;for(i=0;str[i]!=0;i++)if(isupper(str[i]))printf("%cisanuppercasecharacter\n",str[i]);}執(zhí)行FisanuppercasecharacterDisanuppercasecharacterPisanuppercasecharacterisxdigit(測試字符是否為16進(jìn)制數(shù)字)相關(guān)函數(shù)isalnum,isdigit表頭文件#include<ctype.h>定義函數(shù)intisxdigit(intc)函數(shù)說明檢查參數(shù)c是否為16進(jìn)制數(shù)字,只要c為下列其中一個情況則返回TRUE。16進(jìn)制數(shù)字:0123456789ABCDEF返回值若參數(shù)c為16進(jìn)制數(shù)字,則返回TRUE,否則返回NULL(0)。附加說明此為宏定義,非真正函數(shù)。范例/*找出字符串str中為十六進(jìn)制數(shù)字的字符*/#include<ctype.h>main(){charstr[]="123c@#FDsP[e?”;inti;for(i=0;str[i]!=0;i++)if(isxdigit(str[i]))printf("%cisahexadecimaldigits\n",str[i]);}執(zhí)行isahexadecimaldigitsisahexadecimaldigitsisahexadecimaldigitscisahexadecimaldigitsFisahexadecimaldigitsDisahexadecimaldigitseisahexadecimaldigitsatof(將字符串轉(zhuǎn)換成浮點型數(shù))相關(guān)函數(shù)atoi,atol,strtod,strtol,strtoul表頭文件#include<stdlib.h>定義函數(shù)doubleatof(constchar*nptr);atof()會掃描參數(shù)nptr字付串,跳過前面的空格字付,直到遇上函數(shù)說明數(shù)字或正負(fù)符號才開始做轉(zhuǎn)換,而再遇到非數(shù)字或字符串結(jié)束時('\0')才結(jié)束轉(zhuǎn)換,并將結(jié)果返回。參數(shù)nptr字符串可包含正負(fù)號、小數(shù)點或E(e)來表示指數(shù)部分,如123.456或123e-2。返回值返回轉(zhuǎn)換后的浮點型數(shù)。附加說明atof()與使用strtod(nptr,(char**)NULL);結(jié)果相同。范例/*將字符串a(chǎn)與字符串b轉(zhuǎn)換成數(shù)字后相加*/#include<stdlib.h>main(){char*a=”-100.23”;char*b=”200e-2”;floatc;c=atof(a)+atof(b);printf("c=%.2f\n",c);}執(zhí)行c=-98.23atoi(將字符串轉(zhuǎn)換成整型數(shù))strtoul
strtoul函數(shù)說明返回值atoi()會掃描參數(shù)nptr函數(shù)說明返回值atoi()會掃描參數(shù)nptr字符串,跳過前面的空格字符,直到遇上數(shù)字或正負(fù)符號才開始做轉(zhuǎn)換,而再遇到非數(shù)字或字符串結(jié)束時('\0')才結(jié)束轉(zhuǎn)換,并將結(jié)果返回。返回轉(zhuǎn)換后的整型數(shù)。附加說明atoi()與使用strtol(nptr,(char**)NULL,10);結(jié)果相同。范例/*將字符串a(chǎn)與字符串b轉(zhuǎn)換成數(shù)字后相加*/#includevstdlib.h>mian(){chara[]=''-100”;charb[]=”456”;intc;c=atoi(a)+atoi(b);printf(c=%d\n',c);}執(zhí)行c=356atol(將字符串轉(zhuǎn)換成長整型數(shù))相關(guān)函數(shù)atof,atoi,strtod,strtol,strtoul相關(guān)函數(shù)表頭文件#includevstdlib.h>表頭文件#includevstdlib.h>定義函數(shù)longatol(constchar*nptr);函數(shù)說明atol()定義函數(shù)longatol(constchar*nptr);函數(shù)說明atol()會掃描參數(shù)nptr字符串,跳過前面的空格字符,直到遇上數(shù)字或正負(fù)符號才開始做轉(zhuǎn)換,而再遇到非數(shù)字或字符串結(jié)束時('\0')才結(jié)束轉(zhuǎn)換,并將結(jié)果返回。返回值返回轉(zhuǎn)換后的長整型數(shù)。返回值返回轉(zhuǎn)換后的長整型數(shù)。附加說明atol()與使用strtol(nptr,(char**)NULL,10);結(jié)果相同。附加說明范例
/*將字符串a(chǎn)與字符串b轉(zhuǎn)換成數(shù)字后相加*/#include<stdlib.h>main(){chara[]="1000000000";charb[]=”234567890”;longc;c=atol(a)+atol(b);printf("c=%d\n”,c);}執(zhí)行c=1234567890gcvt(將浮點型數(shù)轉(zhuǎn)換為字符串,取四舍五入)范例ecvt,fcvt,sprintf#include<stdlib.h>char*gcvt(doublenumber,范例ecvt,fcvt,sprintf#include<stdlib.h>gcvt()用來將參數(shù)number轉(zhuǎn)換成ASCII碼字符串,參數(shù)ndigits表示顯示的位數(shù)。gcvt()與ecvt()和fcvt()不同的地方在于,gcvt()所轉(zhuǎn)換后的字符串包含小數(shù)點或正負(fù)符號。若轉(zhuǎn)換成功,轉(zhuǎn)換后的字符串會放在參數(shù)buf指針?biāo)傅目臻g。返回一字符串指針,此地址即為buf指針。范例范例#include<stdlib.h>main(){doublea=123.45;doubleb=-1234.56;char*ptr;intdecpt,sign;gcvt(a,5,ptr);printf("avalue=%s\n",ptr);ptr=gcvt(b,6,ptr);printf(“bvalue=%s\n",ptr);}執(zhí)行avalue=123.45bvalue=-1234.56strtod(將字符串轉(zhuǎn)換成浮點數(shù))atoi,atol,strtod,strtol,strtoul#include<stdlib.h>doublestrtod(constchar*nptr,char**endptr);strtod()會掃描參數(shù)nptr字符串,跳過前面的空格字符,直到遇上數(shù)字或正負(fù)符號才開始做轉(zhuǎn)換,直到出現(xiàn)非數(shù)字或字符串結(jié)束時('\0')才結(jié)束轉(zhuǎn)換,并將結(jié)果返回。若endptr不為NULL,則會將遇到不合條件而終止的nptr中的字符指針由endptr傳回。參數(shù)nptr字符串可包含正負(fù)號、小數(shù)點或E(e)來表示指數(shù)部分。如123.456或123e-2。返回轉(zhuǎn)換后的浮點型數(shù)。參考atof()。范例范例范例范例/*將字符串a(chǎn),b,c分別采用10,2,16進(jìn)制轉(zhuǎn)換成數(shù)字*/#include<stdlib.h>mian(){chara[]=”1000000000”;charb[]=”1000000000”;charc[]=”ffff”';printf("a=%d\n",strtod(a,NULL,10));printf("b=%d\n",strtod(b,NULL,2));printf("c=%d\n",strtod(c,NULL,16));}執(zhí)行a=1000000000b=512c=65535strtol(將字符串轉(zhuǎn)換成長整型數(shù))相關(guān)函數(shù)表頭文件定義函數(shù)函數(shù)說明返回值附加說明atof,atoi,atol,strtod,strtoul#include<stdlib.h>longintstrtol(constchar*nptr,char**endptr,intbase);strtol()會將參數(shù)nptr字符串根據(jù)參數(shù)base來轉(zhuǎn)換成長整型數(shù)。參數(shù)base范圍從2至36,或0。參數(shù)base代表采用的進(jìn)制方式,如base值為10則采用10進(jìn)制,若base值為16則采用16進(jìn)制等。當(dāng)base值為0時則是采用10進(jìn)制做轉(zhuǎn)換,但遇到如'0x'前置字符則會使用16進(jìn)制做轉(zhuǎn)換。一開始strtol()會掃描參數(shù)nptr字符串,跳過前面的空格字符,直到遇上數(shù)字或正負(fù)符號才開始做轉(zhuǎn)換,再遇到非數(shù)字或字符串結(jié)束時('\0')結(jié)束轉(zhuǎn)換,并將結(jié)果返回。若參數(shù)endptr不為NULL,則會將遇到不合條件而終止的nptr中的字符指針由endptr返回。返回轉(zhuǎn)換后的長整型數(shù),否則返回ERANGE并將錯誤代碼存入errno中。ERANGE指定的轉(zhuǎn)換字符串超出合法范圍。/*將字符串a(chǎn),b,c分別采用10,2,16進(jìn)制轉(zhuǎn)換成數(shù)字*/#include<stdlib.h>main(){chara[]=”1000000000”;charb[]=”1000000000”;charc[]=”ffff”';printf("a=%d\n",strtol(a,NULL,10));printf("b=%d\n'',strtol(b,NULL,2));printf("c=%d\n",strtol(c,NULL,16));}執(zhí)行a=1000000000b=512c=65535strtoul(將字符串轉(zhuǎn)換成無符號長整型數(shù))相關(guān)函數(shù)atof,atoi,atol,strtod,strtol相關(guān)函數(shù)表頭文件#include<stdlib.h>定義函數(shù)函數(shù)說明返回值附加說明unsignedlongintstrtoul(constchar*nptr,char**endptr,intbase);strtoul()會將參數(shù)nptr字符串根據(jù)參數(shù)base來轉(zhuǎn)換成無符號的長整型數(shù)。參數(shù)base范圍從2至36,或0。參數(shù)base代表采用的進(jìn)制方式,如base值為10則采用10進(jìn)制,若base值為16則采用16進(jìn)制數(shù)等。當(dāng)base值為0時則是采用10進(jìn)制做轉(zhuǎn)換,但遇到如'0x'前置字符則會使用16進(jìn)制做轉(zhuǎn)換。一開始strtoul()會掃描參數(shù)nptr字符串,跳過前面的空格字符串,直到遇上數(shù)字或正負(fù)符號才開始做轉(zhuǎn)換,再遇到非數(shù)字或字符串結(jié)束時('\0')結(jié)束轉(zhuǎn)換,并將結(jié)果返回。若參數(shù)endptr不為NULL,則會將遇到不合條件而終止的nptr中的字符指針由endptr返回。返回轉(zhuǎn)換后的長整型數(shù),否則返回ERANGE并將錯誤代碼存入errno中。ERANGE指定的轉(zhuǎn)換字符串超出合法范圍。范例參考strtol()
范例toascii(將整型數(shù)轉(zhuǎn)換成合法的ASCII碼字符)范例isascii,toupper,tolower#include<ctype.h>inttoascii(intc)toascii()會將參數(shù)c轉(zhuǎn)換成7位的unsignedchar值,第八位則會被清除,此字符即會被轉(zhuǎn)成ASCII碼字符。將轉(zhuǎn)換成功的ASCII碼字符值返回。#include<stdlib.h>main(){inta=217;charb;printf("beforetoascii():avalue=%d(%c)\n",a,a);b=toascii(a);printf(“aftertoascii():avalue=%d(%c)\n",b,b);}執(zhí)行beforetoascii():avalue=217()aftertoascii():avalue=89(Y)tolower(將大寫字母轉(zhuǎn)換成小寫字母)isalpha,toupper#include<stdlib.h>inttolower(intc);若參數(shù)c為大寫字母則將該對應(yīng)的小寫字母返回。返回轉(zhuǎn)換后的小寫字母,若不須轉(zhuǎn)換則將參數(shù)c值返回。
附加說明范例/*將s字符串內(nèi)的大寫字母轉(zhuǎn)換成小寫字母*/#include<ctype.h>main()chars[]=”aBcDeFgH12345;!#$”;inti;printf(“beforetolower():%s\n",s);for(i=0;Ivsizeof(s);i++)s[i]=tolower(s[i]);printf(“aftertolower():%s\n",s);執(zhí)行beforetolower():aBcDeFgH12345;!#$aftertolower():abcdefgh12345;!#$toupper(將小寫字母轉(zhuǎn)換成大寫字母)相關(guān)函數(shù)isalpha,tolower表頭文件#include<ctype.h>相關(guān)函數(shù)isalpha,tolower表頭文件#include<ctype.h>定義函數(shù)inttoupper(intc);函數(shù)說明 若參數(shù)c為小寫字母則將該對映的大寫字母返回。返回值 返回轉(zhuǎn)換后的大寫字母,若不須轉(zhuǎn)換則將參數(shù)c值返回。附加說明范例
/*將s字符串內(nèi)的小寫字母轉(zhuǎn)換成大寫字母*/#include<ctype.h>main(){chars[]=”aBcDeFgH12345;!#$”;inti;printf(“beforetoupper():%s\n",s);for(i=0;Ivsizeof(s);i++)s[i]=toupper(s[i]);printf(“aftertoupper():%s\n",s);}執(zhí)行beforetoupper():aBcDeFgH12345;!#$aftertoupper():ABCDEFGH12345;!#$Calloc(配置內(nèi)存空間)相關(guān)函數(shù)表頭文件定義函數(shù)函數(shù)說明返回值malloc,free,realloc,brk#include<stdlib.h>void*calloc(size_tnmemb,size_tsize);calloc()用來配置nmemb個相鄰的內(nèi)存單位,每一單位的大小為size,并返回指向第一個元素的指針。這和使用下列的方式效果相同:malloc(nmemb*size);不過,在利用calloc()配置內(nèi)存時會將內(nèi)存內(nèi)容初始化為0。若配置成功則返回一指針,失敗則返回NULL。范例/*動態(tài)配置10個structtest空間*/#include<stdlib.h>structtest{inta[10];charb[20];}main(){structtest*ptr=calloc(sizeof(structtest),10);free(釋放原先配置的內(nèi)存)#include<stdlib.h>voidfree(void*ptr);malloc,calloc,realloc,brk#include<stdlib.h>voidfree(void*ptr);參數(shù)ptr為指向先前由malloc()、calloc()或realloc()所返回的內(nèi)存指針。調(diào)用free()后ptr所指的內(nèi)存空間便會被收回。假若參數(shù)ptr所指的內(nèi)存空間已被收回或是未知的內(nèi)存地址,則調(diào)用free()可能會有無法預(yù)期的情況發(fā)生。若參數(shù)ptr為NULL,則free()不會有任何作用。范例getpagesize(取得內(nèi)存分頁大小)范例sbrk#include<unistd.h>size_tgetpagesize(void);返回一分頁的大小,單位為字節(jié)(byte)。此為系統(tǒng)的分頁大小,不一定會和硬件分頁大小相同。內(nèi)存分頁大小。在Intelx86上其返回值應(yīng)為4096bytes。#include<unistd.h>main(){printf(“pagesize=%d\n",getpagesize());}
malloc(配置內(nèi)存空間)范例calloc,free,realloc,brk范例#include<stdlib.h>void*malloc(size_tsize);malloc()用來配置內(nèi)存空間,其大小由指定的size決定。若配置成功則返回一指針,失敗則返回NULL。voidp=malloc(1024);/*配置1k的內(nèi)存*/mmap(建立內(nèi)存映射)munmap,open#include<unistd.h>#include<sys/mman.h>void*mmap(void*start,size_tlength,intprot,intflags,intfd,off_toffsize);mmap()用來將某個文件內(nèi)容映射到內(nèi)存中,對該內(nèi)存區(qū)域的存取即是直接對該文件內(nèi)容的讀寫。參數(shù)start指向欲對應(yīng)的內(nèi)存起始地址,通常設(shè)為NULL,代表讓系統(tǒng)自動選定地址,對應(yīng)成功后該地址會返回。參數(shù)length代表將文件中多大的部分對應(yīng)到內(nèi)存。參數(shù)prot代表映射區(qū)域的保護(hù)方式,有下列組合:PROT_EXEC映射區(qū)域可被執(zhí)行PROT_READ映射區(qū)域可被讀取PROT_WRITE映射區(qū)域可被寫入PROT_NONE映射區(qū)域不能存取參數(shù)flags會影響映射區(qū)域的各種特性:MAP_FIXED如果參數(shù)start所指的地址無法成功建立映射時,則放棄映射,不對地址做修正。通常不鼓勵用此旗標(biāo)。MAP_SHARED對映射區(qū)域的寫入數(shù)據(jù)會復(fù)制回文件內(nèi),而且范例范例允許其他映射該文件的進(jìn)程共享。MAP_PRIVATE對映射區(qū)域的寫入操作會產(chǎn)生一個映射文件的復(fù)制,即私人的“寫入時復(fù)制”(copyonwrite)對此區(qū)域作的任何修改都不會寫回原來的文件內(nèi)容。MAP_ANONYMOUS建立匿名映射。此時會忽略參數(shù)fd,不涉及文件,而且映射區(qū)域無法和其他進(jìn)程共享。MAP_DENYWRITE只允許對映射區(qū)域的寫入操作,其他對文件直接寫入的操作將會被拒絕。MAP_LOCKED將映射區(qū)域鎖定住,這表示該區(qū)域不會被置換(swap)。在調(diào)用mmap()時必須要指定MAP_SHARED或MAP_PRIVATE。參數(shù)fd為open()返回的文件描述詞,代表欲映射到內(nèi)存的文件。參數(shù)offset為文件映射的偏移量,通常設(shè)置為0,代表從文件最前方開始對應(yīng),offset必須是分頁大小的整數(shù)倍。若映射成功則返回映射區(qū)的內(nèi)存起始地址,否則返回MAP_FAILED(一1),錯誤原因存于errno中。EBADF參數(shù)fd不是有效的文件描述詞EACCES存取權(quán)限有誤。如果是MAP_PRIVATE情況下文件必須可讀,使用MAP_SHARED則要有PROT_WRITE以及該文件要能寫入。EINVAL參數(shù)start、length或offset有一個不合法。EAGAIN文件被鎖住,或是有太多內(nèi)存被鎖住。ENOMEM內(nèi)存不足。/*利用mmap()來讀取/etc/passwd文件內(nèi)容*/#includevsys/types.h>#includevsys/stat.h>#includevfcntl.h>#includevunistd.h>#include<sys/mman.h>main(){intfd;void*start;structstatsb;fd=open('7etc/passwd'',O_RDONLY);/*打開/etc/passwd*/fstat(fd,&sb);/*取得文件大小*/start=mmap(NULL,sb.st_size,PROT_READ,MAP_PRIVATE,fd,O);if(start==MAP_FAILED)/*判斷是否映射成功*/return;printf(“%s",start);munma(start,sb.st_size);/*解除映射*/closed(fd);}執(zhí)行root:x:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:daemon:x:2:2:daemon:/sbinadm:x:3:4:adm:/var/adm:lp:x:4:7:lp:/var/spool/lpd:sync:x:5:0:sync:/sbin:bin/sync:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:news:x:9:13:news:/var/spool/news:uucp:x:10:14:uucp:/var/spool/uucp:operator:x:11:0:operator:/root:games:x:12:100:games:/usr/games:gopher:x:13:30:gopher:/usr/lib/gopher-data:ftp:x:14:50:FTPUser:/home/ftp:nobody:x:99:99:Nobody:/:xfs:x:100:101:XFontServer:/etc/xll/fs:/bin/falsegdm:x:42:42::/home/gdm:/bin/bashkids:x:500:500:/home/kids:/bin/bashmunmap(解除內(nèi)存映射)相關(guān)函數(shù)mmap#includevunistd.h>#includevsys/mman.h>intmunmap(void*start,size_tlength);munmap()用來取消參數(shù)start所指的映射內(nèi)存起始地址,參數(shù)length則是欲取消的內(nèi)存大小。當(dāng)進(jìn)程結(jié)束或利用exec相關(guān)函數(shù)來執(zhí)行其他程序時,映射內(nèi)存會自動解除,但關(guān)閉對應(yīng)的文件描述詞時不會解除映射。如果解除映射成功則返回0,否則返回一1,錯誤原因存于errno中EINVAL參數(shù)start或length不合法。表頭文件定義函數(shù)函數(shù)說明返回值錯誤代碼
范例參考mmap()asctime(將時間和日期以字符串格式表示)相關(guān)函數(shù)time,ctime,gmtime,localtime表頭文件#include<time.h>定義函數(shù)char*asctime(conststructtm*timeptr);asctime()將參數(shù)timeptr所指的tm結(jié)構(gòu)中的信息轉(zhuǎn)換成真實世界函數(shù)說明所使用的時間日期表示方法,然后將結(jié)果以字符串形態(tài)返回。此函數(shù)已經(jīng)由時區(qū)轉(zhuǎn)換成當(dāng)?shù)貢r間,字符串格式為:“WedJun3021:49:081993\n”返回值若再調(diào)用相關(guān)的時間日期函數(shù),此字符串可能會被破壞。此函數(shù)與ctime不同處在于傳入的參數(shù)是不同的結(jié)構(gòu)。附加說明返回一字符串表示目前當(dāng)?shù)氐臅r間日期。范例#include<time.h>main(){time_ttimep;time(&timep);printf(“%s^,asctime(gmtime(&timep)));SatOct2802:10:062000
ctime(將時間和日期以字符串格式表示)相關(guān)函數(shù)time,asctime,gmtime,localtime相關(guān)函數(shù)表頭文件#include<time.h>表頭文件#include<time.h>定義函數(shù)char*ctime(consttime_t*timep);函數(shù)說明ctime定義函數(shù)char*ctime(consttime_t*timep);函數(shù)說明ctime()將參數(shù)timep所指的time_t結(jié)構(gòu)中的信息轉(zhuǎn)換成真實世界所使用的時間日期表示方法,然后將結(jié)果以字符串形態(tài)返回。此函數(shù)已經(jīng)由時區(qū)轉(zhuǎn)換成當(dāng)?shù)貢r間,字符串格式為“WedJun3021:49081993\n”。若再調(diào)用相關(guān)的時間日期函數(shù),此字符串可能會被破壞。返回值返回一字符串表示目前當(dāng)?shù)氐臅r間日期。返回值返回一字符串表示目前當(dāng)?shù)氐臅r間日期。范例#include<time.h>main(){time_ttimep;time(&timep);printf("%s",ctime(&timep));}執(zhí)行SatOct2810:12:052000gettimeofday(取得目前的時間)相關(guān)函數(shù)表頭文件定義函數(shù)函數(shù)說明time,ctime,ftime,settimeofday#include<sys/time.h>#include<unistd.h>intgettimeofday(structtimeval*tv,structtimezone*tz)gettimeofday()會把目前的時間有tv所指的結(jié)構(gòu)返回,當(dāng)?shù)貢r區(qū)的信息則放到tz所指的結(jié)構(gòu)中。timeval結(jié)構(gòu)定義為:structtimeval{longtv_sec;/*秒*/范例longtv_usec;/*微秒*/};timezone結(jié)構(gòu)定義為:structtimezone(inttz_minuteswest;/*和Greenwich時間差了多少分鐘*/inttz_dsttime;/*日光節(jié)約時間的狀態(tài)*/};上述兩個結(jié)構(gòu)都定義在/usr/include/sys/time.hotz_dsttime所代表的狀態(tài)如下:DST_NONE/*不使用*/DST_USA/*美國*/DST_AUST/*澳洲*/DST_WET/*西歐*/DST_MET/*中歐*/DST_EET/*東歐*/DST_CAN/*加拿大*/DST_GB/*大不列顛*/DST_RUM/*羅馬尼亞*/DST_TUR/*土耳其*/DST_AUSTALT/*澳洲(1986年以后)*/成功則返回0失敗返回一1,錯誤代碼存于errnooEFAULT指針tv和tz所指的內(nèi)存空間超出存取權(quán)限。#includevsys/time.h>#includevunistd.h>main()(structtimevaltv;structtimezonetz;gettimeofday(&tv,&tz);printf(“tv_sec;%d\n",tv,.tv_sec);printf(“tv_usec;%d\n",tv.tv_usec);printf(“tz_minuteswest;%d\n",tz.tz_minuteswest);printf(“tz_dsttime,%d\n",tz.tz_dsttime);執(zhí)行tv_sec:974857339tv_usec:136996tz_minuteswest:-540tz_dsttime:0gmtime(取得目前時間和日期)time,asctime,ctime,localtime#includevtime.h>structtm*gmtime(consttime_t*timep);gmtime()將參數(shù)timep所指的time_t結(jié)構(gòu)中的信息轉(zhuǎn)換成真實世界所使用的時間日期表示方法,然后將結(jié)果由結(jié)構(gòu)tm返回。結(jié)構(gòu)tm的定義為:structtm{inttm_sec;inttm_min;inttm_hour;inttm_mday;inttm_mon;inttm_year;inttm_wday;inttm_yday;inttm_isdst;};inttm_sec代表目前秒數(shù),正常范圍為0-59,但允許至61秒inttm_min代表目前分?jǐn)?shù),范圍0-59inttm_hour從午夜算起的時數(shù),范圍為0-23inttm_mday目前月份的日數(shù),范圍01-31inttm_mon代表目前月份,從一月算起,范圍從0-11inttm_year從1900年算起至今的年數(shù)inttm_wday一星期的日數(shù),從星期一算起,范圍為0-6inttm_yday從今年1月1日算起至今的天數(shù),范圍為0-365inttm_isdst日光節(jié)約時間的旗標(biāo)此函數(shù)返回的時間日期未經(jīng)時區(qū)轉(zhuǎn)換,而是UTC時間。返回結(jié)構(gòu)tm代表目前UTC時間范例#include<time.h>main()(char*wday[]={“Sun”,”Mon”,”Tue”,”Wed”,”Thu”,”Fri”,”Sat”};time_ttimep;structtm*p;time(&timep);p=gmtime(&timep);printf("%d%d%d'',(1900+p->tm_year),(1+p->tm_mon),p->tm_mday);printf("%s%d;%d;%d\n",wday[p->tm_wday],p->tm_hour,p->tm_min,p->tm_sec);}執(zhí)行2000/10/28Sat8:15:38范例localtime(取得當(dāng)?shù)啬壳皶r間和日期)范例time,asctime,ctime,gmtime#include<time.h>structtm*localtime(consttime_t*timep);localtime()將參數(shù)timep所指的time_t結(jié)構(gòu)中的信息轉(zhuǎn)換成真實世界所使用的時間日期表示方法,然后將結(jié)果由結(jié)構(gòu)tm返回。結(jié)構(gòu)tm的定義請參考gmtime()。此函數(shù)返回的時間日期已經(jīng)轉(zhuǎn)換成當(dāng)?shù)貢r區(qū)。返回結(jié)構(gòu)tm代表目前的當(dāng)?shù)貢r間。#include<time.h>main(){char*wday[]={"Sun'',''Mon'',''Tue'',''Wed”,”Thu'',''Fri”,''Sat''};time_ttimep;structtm*p;time(&timep);p=localtime(&timep);/*取得當(dāng)?shù)貢r間*/printf(“%d%d%d",(1900+p->tm_year),(l+p->tm_mon),p->tm_mday);printf(“%s%d:%d:%d\n',wday[p->tm_wday],p->tm_hour,p->tm_min,p->tm_sec);}
執(zhí)行2000/10/28Sat11:12:22mktime(將時間結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)換成經(jīng)過的秒數(shù))范例time,asctime,gmtime,localtime范例#include<time.h>time_tmktime(strcuttm*timeptr);mktime()用來將參數(shù)timeptr所指的tm結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)換成從公元1970年1月1日0時0分0秒算起至今的UTC時間所經(jīng)過的秒數(shù)。返回經(jīng)過的秒數(shù)。/*用time()取得時間(秒數(shù)),利用localtime()轉(zhuǎn)換成structtm再利用mktine()將structtm轉(zhuǎn)換成原來的秒數(shù)*/#include<time.h>main(){time_ttimep;strcuttm*p;time(&timep);printf("time():%d\n",timep);p=localtime(&timep);timep=mktime(p);printf("time()->localtime()->mktime():%d\n",timep);time():974943297time()->localtime()->mktime():974943297settimeofday(設(shè)置目前時間)
相關(guān)函數(shù)表頭文件定義函數(shù)函數(shù)說明返回值錯誤代碼time,ctime,ftime,gettimeofday#include<sys/time.h>#include<unistd.h>相關(guān)函數(shù)表頭文件定義函數(shù)函數(shù)說明返回值錯誤代碼time,ctime,ftime,gettimeofday#include<sys/time.h>#include<unistd.h>intsettimeofday(conststructtimeval*tv,conststructtimezone*tz);settimeofday()會把目前時間設(shè)成由tv所指的結(jié)構(gòu)信息,當(dāng)?shù)貢r區(qū)信息則設(shè)成tz所指的結(jié)構(gòu)。詳細(xì)的說明請參考gettimeofday()。注意,只有root權(quán)限才能使用此函數(shù)修改時間。成功則返回0,失敗返回一1,錯誤代碼存于errno。EPERM并非由root權(quán)限調(diào)用settimeofday(),權(quán)限不夠。EINVAL時區(qū)或某個數(shù)據(jù)是不正確的,無法正確設(shè)置時間。范例ctime,ftime,gettimeofday范例#include<time.h>time_ttime(time_t*t);此函數(shù)會返回從公元1970年1月1日的UTC時間從0時0分0秒算起到現(xiàn)在所經(jīng)過的秒數(shù)。如果t并非空指針的話,此函數(shù)也會將返回值存到t指針?biāo)傅膬?nèi)存。成功則返回秒數(shù),失敗則返回((time_t)-1)值,錯誤原因存于errno中。#include<time.h>mian(){intseconds=time((time_t*)NULL);printf("%d\n”,seconds);}執(zhí)行972699100
bcmp(比較內(nèi)存內(nèi)容)相關(guān)函數(shù)bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp表頭文件#include<string.h>定義函數(shù)intbcmp(constvoid*s1,constvoid*s2,intn);函數(shù)說明bcmp()用來比較s1和s2所指的內(nèi)存區(qū)間前n個字節(jié),若參數(shù)n為0,則返回0。返回值若參數(shù)s1和s2所指的內(nèi)存內(nèi)容都完全相同則返回0值,否則返回非零值。附加說明建議使用memcmp()取代。范例()。參考memcmpbcopy(拷貝內(nèi)存內(nèi)容)相關(guān)函數(shù)memccpy,memcpy,memmove,strcpy,ctrncpy表頭文件#include<string.h>定義函數(shù)voidbcopy(constvoid*src,void*dest,intn);函數(shù)說明bcopy()與memcpy()一樣都是用來拷貝src所指的內(nèi)存內(nèi)容前n個字節(jié)到dest所指的地址,不過參數(shù)src與dest在傳給函數(shù)時是相反的位置返回值無附加說明建議使用memcpy()取代范例1
#include<string.h>main(){chardest[30]="string(a)";charsrc[30]=''string\0string'';inti;bcopy(src,dest,30);/*src指針放在前#include<string.h>main(){chardest[30]="string(a)";charsrc[30]=''string\0string'';inti;bcopy(src,dest,30);/*src指針放在前*/printf(bcopy():“)for(i=0;iv30;i++)printf("%c”,dest[i]);memcpy(destsrc,30);/*dest指針放在錢*/printf(‘\nmemcpy():");for(i=0;i<30;i++)printf("%c”,dest[i]);執(zhí)行bcopy():stringstringmemcpy():stringsringbzero(將一段內(nèi)存內(nèi)容全清為零)相關(guān)函數(shù)表頭文件定義函數(shù)函數(shù)說明返回值附加說明memset,swab#include<string.h>voidbzero(void*s,intn);bzero()會將參數(shù)s所指的內(nèi)存區(qū)域前n個字節(jié),全部設(shè)為零值。相當(dāng)于調(diào)用memset((void*)s,0,size_tn);無建議使用memset取代范例參考memset()。
index(查找字符串中第一個出現(xiàn)的指定字符)相關(guān)函數(shù)rindex,srechr相關(guān)函數(shù)rindex,srechr,strrchr表頭文件#include<string.h>定義函數(shù)char*index(constchar*s,intc);定義函數(shù)index()用來找出參數(shù)s字符串中第一個出現(xiàn)的參數(shù)c地址,然后函數(shù)說明 將該字符出現(xiàn)的地址返回。字符串結(jié)束字符(NULL)也視為字符串一部分。返回值 如果找到指定的字符則返回該字符所在地址,否則返回0。范例#include<string.h>main(){char*s=”0123456789012345678901234567890”;char*p;p=index(s,'5');printf(%s\n”,p);執(zhí)行56789012345678901234567890memccpy(拷貝內(nèi)存內(nèi)容)相關(guān)函數(shù)bcopy,memcpy,memmove,strcpy,strncpy相關(guān)函數(shù)表頭文件#include<string.h>表頭文件#include<string.h>定義函數(shù)void*memccpy(void*dest,constvoid*src,intc,size_tn);定義函數(shù)memccpy()用來拷貝src所指的內(nèi)存內(nèi)容前n個字節(jié)到dest所指函數(shù)說明 的地址上。與memcpy()不同的是,memccpy()會在復(fù)制時檢查參數(shù)c是否出現(xiàn),若是則返回dest中值為c的下一個字節(jié)地址。
返回值返回指向dest中值為c的下一個字節(jié)指針。返回值為0表示在src所指內(nèi)存前n個字節(jié)中沒有值為c的字節(jié)。返回值范例#include<string.h>main(){chara[]=''string[a]'';charb[]="string(b)"lmemccpy(a,b,'B',sizeof(b));printf(memccpy():%s\n",a);}執(zhí)行memccpy():string(b)范例memchr(在某一內(nèi)存范圍中查找一特定字符)范例#include<string.h>index,rindex,strchr,strpbrk,strrchr,strsep,strspn,strstrvoid*memchr(constvoid*s,intc,size_tn);#include<string.h>memchr()從頭開始搜尋s所指的內(nèi)存內(nèi)容前n個字節(jié),直到發(fā)現(xiàn)第一個值為c的字節(jié),則返回指向該字節(jié)的指針。如果找到指定的字節(jié)則返回該字節(jié)的指針,否則返回0。#include<string.h>main(){char*s=”0123456789012345678901234567890”;char*p;p=memchr(s,'5',10);printf("%s\n”,p);}
執(zhí)行56789012345678901234567890memcmp(比較內(nèi)存內(nèi)容)相關(guān)函數(shù)bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp表頭文件#include<string.h>定義函數(shù)intmemcmp(constvoid*s1,constvoid*s2,size_tn);函數(shù)說明返回值memcmp()用來比較s1和s2所指的內(nèi)存區(qū)間前n個字符。字符串大小的比較是以ASCII碼表上的順序來決定,次順序亦為字符的值。memcmp()首先將s1第一個字符值減去s2第一個字符的值,若差為0則再繼續(xù)比較下個字符,若差值不為0則將差值返回。例如,字符串“Ac”和“ba”比較則會返回字符'A'(65)和'b'(98)的差值(一33)。若參數(shù)s1和s2所指的內(nèi)存內(nèi)容都完全相同則返回0值。s1若大于s2則返回大于0的值。s1若小于s2則返回小于0的值。范例#include<string.h>main(){char*a="aBcDeF";char*b=”AbCdEfchar*c="aacdefchar*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));執(zhí)行memcmp(a,b):1/*memcmp(a,b):1/*字符串a(chǎn)>字符串b,返回1*/memcmp(a,c):-1/*字符串a(chǎn)<字符串c,返回一1*/memcmp(a,d):0/*字符串a(chǎn)=字符串d,返回0*/
memcpy(拷貝內(nèi)存內(nèi)容)相關(guān)函數(shù)bcopy,memccpy,memcpy,memmove,strcpy,strncpy相關(guān)函數(shù)表頭文件#include<string.h>表頭文件#include<string.h>定義函數(shù)void*memcpy(void*dest,constvoid*src,size_tn);定義函數(shù)memcpy()用來拷貝src所指的內(nèi)存內(nèi)容前n個字節(jié)到dest所指的函數(shù)說明 內(nèi)存地址上。與strcpy()不同的是,memcpy()會完整的復(fù)制n個字節(jié),不會因為遇到字符串結(jié)束'\0'而結(jié)束。返回值返回指向dest的指針。附加說明 指針src和dest所指的內(nèi)存區(qū)域不可重疊。范例#include<string.h>main(){chara[30]="string(a)";charb[30]="string\0string";inti;strcpy(a,b);printf(strcpy():");for(i=0;iv30;i++)printf(“%c",a[i]);memcpy(a,b,30);printf(“\nmemcpy():");for(i=0;i<30;i++)printf(“%c",a[i]);執(zhí)行strcpy():stringa)memcpy():stringstring
memmove(拷貝內(nèi)存內(nèi)容)相關(guān)函數(shù)bcopy,memccpy,memcpy,strcpy,strncpy表頭文件#include<string.h>定義函數(shù)void*memmove(void*dest,constvoid*src,size_tn);memmove()與memcpy()一樣都是用來拷貝src所指的內(nèi)存內(nèi)函數(shù)說明容前n個字節(jié)到dest所指的地址上。不同的是,當(dāng)src和dest所指的內(nèi)存區(qū)域重疊時,memmove()仍然可以正確的處理,不過執(zhí)行效率上會比使用memcpy()略慢些。返回值返回指向dest的指針。附加說明指針src和dest所指的內(nèi)存區(qū)域可以重疊。范例參考memcpy()。mlemset(將一段內(nèi)存空間填入某值)相關(guān)函數(shù)bzero,swab表頭文件#include<string.h>定義函數(shù)void*memset(void*s,intc,size_tn);memset()會將參數(shù)s所指的內(nèi)存區(qū)域前n個字節(jié)以參數(shù)c填入,函數(shù)說明然后返回指向s的指針。在編寫程序時,若需要將某一數(shù)組作初始化,memset()會相當(dāng)方便。返回值返回指向s的指針。附加說明參數(shù)c雖聲明為int,但必須是unsignedchar,所以范圍在0到255之間。范例
#include<string.h>main(){chars[30];memset(s,'A',sizeof(s));s[30]='\0';printf("%s\n”,s);執(zhí)行AAAAAAAAAAAAAAAAAAAAAAAAAAAAAArindex(查找字符串中最后一個出現(xiàn)的指定字符)相關(guān)函數(shù)index,memchr,strchr,strrchr相關(guān)函數(shù)表頭文件#include<string.h>表頭文件#include<string.h>定義函數(shù)char*rindex(constchar*s,intc);定義函數(shù)rindex()用來找出參數(shù)s字符串中最后一個出現(xiàn)的參數(shù)c地址,函數(shù)說明 然后將該字符出現(xiàn)的地址返回。字符串結(jié)束字符(NULL)也視為字符串一部分。返回值 如果找到指定的字符則返回該字符所在的地址,否則返回0。范例#include<string.h>mian(){char*s=”0123456789012345678901234567890”;char*p;p=rindex(s,'5');printf("%s\n”,p);執(zhí)行567890相關(guān)函數(shù)表頭文件定義函數(shù)函數(shù)說明返回值strcasecmp(忽略大小寫比較字符串)bcmp,memcmp,strcmp,strcoll,strncmp#include<string.h>intstrcasecmp(constchar*s1,constchar*s2);strcasecmp()用來比較參數(shù)s1和s2字符串,比較時會自動忽略大小寫的差異。若參數(shù)s1和s2字符串相同則返回0。s1長度大于s2長度則返回大于0的值,s1長度若小于s2長度則返回小于0的值。范例#include<string.h>main(){char*a="aBcDeF";char*b=“AbCdEfif(!strcasecmp(a,b))printf("%s=%s\n”,a,b);}執(zhí)行aBcDeF=AbCdEfstrcat(連接兩字符串)相關(guān)函數(shù)表頭文件定義函數(shù)函數(shù)說明返回值bcopy,memccpy,memcpy,strcpy,strncpy#include<string.h>char*strcat(char*dest,constchar*src);strcat()會將參數(shù)src字符串拷貝到參數(shù)dest所指的字符串尾。第一個參數(shù)dest要有足夠的空間來容納要拷貝的字符串。返回參數(shù)dest的字符串起始地址范例#include<string.h.>main(){chara[30]=''string(l)'';charb,=''string(2)'';printf(“beforestrcat():%s\n",a);printf(“afterstrcat():%s\n",strcat(a,b));}執(zhí)行beforestrcat():string(1)afterstrcat():string(1)string(2)范例strchr(查找字符串中第一個出現(xiàn)的指定字符)范例index,memchr,rinex,strbrk,strsep,strspn,strstr,strtok#include<string.h>char*strchr(constchar*s,intc);strchr()用來找出參數(shù)s字符串中第一個出現(xiàn)的參數(shù)c地址,然后將該字符出現(xiàn)的地址返回。如果找到指定的字符則返回該字符所在地址,否則返回0。#include<string.h>main(){char*s=0123456789012345678901234567890”;char*p;p=strchr(s,'5');printf("%s\n”,p);}執(zhí)行56789012345678901234567890
strcmp(比較字符串)范例bcmp,memcmp,strcasecmp,strncasecmp,strcoll范例#include<string.h>intstrcmp(constchar*s1,constchar*s2);strcmp()用來比較參數(shù)s1和s2字符串。字符串大小的比較是以ASCII碼表上的順序來決定,此順序亦為字符的值。strcmp()首先將s1第一個字符值減去s2第一個字符值,若差值為0則再繼續(xù)比較下個字符,若差值不為0則將差值返回。例如字符串“Ac”和“ba”比較則會返回字符“A”(65)和‘b'(98)的差值(一33)。若參數(shù)s1和s2字符串相同則返回0。s1若大于s2則返回大于0的值。s1若小于s2則返回小于0的值。#include<string.h>main(){char*a="aBcDeF";char*b=”AbCdEfchar*c="aacdefchar*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));}執(zhí)行strcmp(a,b):32strcmp(a,c):-31strcmp(a,d):0strcoll(采用目前區(qū)域的字符排列次序來比較字符串)相關(guān)函數(shù)strcmp,bcmp,memcmp,strcasecmp,strncasecmp相關(guān)函數(shù)范例#include<string.h>范例#include<string.h>intstrcoll(constchar*s1,constchar*s2);strcoll()會依環(huán)境變量LC_COLLATE所指定的文字排列次序來比較s1和s2字符串。若參數(shù)s1和s2字符串相同則返回0。s1若大于s2則返回大于0的值。s1若小于s2則返回小于0的值。若LC_COLLATE為“POSIX”或“C”,則strcoll()與strcmp()作用完全相同。參考strcmp()。strcpy(拷貝字符串)相關(guān)函數(shù)bcopy,memcpy,memccpy,memmove表頭文件#include<string.h>定義函數(shù)char*strcpy(char*dest,constchar*src);函數(shù)說明strcpy()會將參數(shù)src字符串拷貝至參數(shù)dest所指的地址。返回值返回參數(shù)dest的字符串起始地址。附加說明如果參數(shù)dest所指的內(nèi)存空間不夠大,可能會造成緩沖溢出(bufferOverflow)的錯誤情況,在編寫程序時請?zhí)貏e留意,或者用strncpy()來取代。范例#include<string.h>main(){chara[30]="string(1)";charb[]="string(2)";printf("beforestrcpy():%s\n",a);printf("afterstrcpy():%s\n",strcpy(a,b));}執(zhí)行beforestrcpy():string(1)afterstrcpy():string(2)strcspn(返回字符串中連續(xù)不含指定字符串內(nèi)容的字符數(shù))相關(guān)函數(shù)strspn表頭文件#inclued<string.h>定義函數(shù)size_tstrcspn(constchar*s,constchar*reject);strcspn()從參數(shù)s字符串的開頭計算連續(xù)的字符,而這些字符都函數(shù)說明完全不在參數(shù)reject所指的字符串中。簡單地說,若strcspn()返回的數(shù)值為n,則代表字符串s開頭連續(xù)有n個字符都不含字符串reject內(nèi)的字符。返回值返回字符串s開頭連續(xù)不含字符串reject內(nèi)的字符數(shù)目。范例#include<string.h>main(){char*str="Linuxwasfirstdevelopedfor386/486-basedpcs.";printf(“%d\n”,strcspn(str,”“));printf(“%d\n",strcspn(str,"/-“));printf(“%d\n”,strcspn(str,”1234567890”));}執(zhí)行5 /*只計算到“”的出現(xiàn),所以返回“Linux”的長度*/33/*計算到出現(xiàn)“/”或“一”,所以返回到“6”的長度*/30/*計算到出現(xiàn)數(shù)字字符為止,所以返回“3”出現(xiàn)前的長度*/
范例strdup(復(fù)制字符串)范例calloc,malloc,realloc,free#include<string.h>char*strdup(constchar*s);strdup()會先用maolloc()配置與參數(shù)s字符串相同的空間大小,然后將參數(shù)s字符串的內(nèi)容復(fù)制到該內(nèi)存地址,然后把該地址返回。該地址最后可以利用free()來釋放。返回一字符串指針,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療護(hù)理醫(yī)學(xué)培訓(xùn) 小學(xué)二年級健康課課件
- DB 3705T 49-2024黃河口灘區(qū)肉羊疫病防控技術(shù)規(guī)范
- 中央空調(diào)清洗保養(yǎng)合同
- 個人股份代持合同范本
- 二手房交易獨家代理合同范本
- 業(yè)務(wù)員勞動合同樣本集
- 臨時雇傭合同書樣本
- 個人向公司借款合同細(xì)則
- 個人果園承包合同轉(zhuǎn)讓協(xié)議模板
- 上海市跨境電商合作協(xié)議合同范本
- 中國電信應(yīng)急管理整體解決方案
- 中小學(xué)教師師德師風(fēng)法律法規(guī)培訓(xùn)
- 醫(yī)療器械質(zhì)量管理體系文件模板
- 秦始皇嬴政人物生平介紹PPT
- 在馬克思墓前的講話說課稿公開課一等獎市賽課獲獎?wù)n件
- 骨科無痛病房的建立
- 送養(yǎng)收養(yǎng)合同協(xié)議書
- 塑料成型模具設(shè)計(第2版)江昌勇課件0-導(dǎo)論
- 漢語拼音發(fā)音口型及配圖
- 績效考核管理醫(yī)院績效分配方案包括實施細(xì)則考核表
- 大學(xué)成績單(大專)
評論
0/150
提交評論