?? 08.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><!-- saved from url=(0056)http://linux.tcpip.com.cn/~foolox/c_fun/function/08.html --><HTML><HEAD><TITLE>Untitled Document</TITLE><META http-equiv=Content-Type content="text/html; charset=gb2312"><META content="MSHTML 6.00.2900.2180" name=GENERATOR></HEAD><BODY><TABLE width="100%"> <TBODY> <TR> <TD vAlign=top width=80> <DIV align=right><BR><FONT face=宋體 size=2><A name=linuxc125></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD> <TD><FONT face=宋體 size=2><BR>crypt(將密碼或數(shù)據(jù)編碼) </FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>相關(guān)函數(shù) </FONT></DIV></TD> <TD><FONT face=宋體 size=2>getpass<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD> <TD><FONT face=宋體 size=2>#define _XOPEN_SOURCE<BR>#include<unistd.h><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>定義函數(shù) </FONT></DIV></TD> <TD><FONT face=宋體 size=2>char * crypt (const char *key,const char * salt);<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>函數(shù)說明 </FONT></DIV></TD> <TD><FONT face=宋體 size=2>crypt()將使用Data Encryption Standard(DES)演算法將參數(shù)key所指的字符串加以編碼,key字符串長度僅取前8個字符,超過此長度的字符沒有意義。參數(shù)salt為兩個字符組成的字符串,由a-z、A-Z、0-9,“.”和“/”所組成,用來決定使用4096 種不同內(nèi)建表格的哪一個。函數(shù)執(zhí)行成功后會返回指向編碼過的字符串指針,參數(shù)key 所指的字符串不會有所更動。編碼過的字符串長度為13 個字符,前兩個字符為參數(shù)salt代表的字符串。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>返回值 </FONT></DIV></TD> <TD><FONT face=宋體 size=2>返回一個指向以NULL結(jié)尾的密碼字符串。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>附加說明 </FONT></DIV></TD> <TD><FONT face=宋體 size=2>使用GCC編譯時需加-lcrypt。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>范例 </FONT></DIV></TD> <TD><FONT face=宋體 size=2>#include<unistd.h><BR>main()<BR>{<BR>char passwd[13];<BR>char *key;<BR>char slat[2];<BR>key= getpass(“Input First Password:”);<BR>slat[0]=key[0];<BR>slat[1]=key[1];<BR>strcpy(passwd,crypt(key slat));<BR>key=getpass(“Input Second Password:”);<BR>slat[0]=passwd[0];<BR>slat[1]=passwd[1];<BR>printf(“After crypt(),1st passwd :%s\n”,passwd);<BR>printf(“After crypt(),2nd passwd:%s \n”,crypt(key slat));<BR>}<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>執(zhí)行 </FONT></DIV></TD> <TD><FONT face=宋體 size=2>Input First Password: /* 輸入test,編碼后存于passwd[ ] */<BR>Input Second Password /*輸入test,密碼相同編碼后也會相同*/<BR>After crypt () 1st Passwd : teH0wLIpW0gyQ<BR>After crypt () 2nd Passwd : teH0wLIpW0gyQ<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><BR><FONT face=宋體 size=2><A name=linuxc126></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD> <TD><FONT face=宋體 size=2><BR>bsearch(二元搜索) </FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>相關(guān)函數(shù) </FONT></DIV></TD> <TD><FONT face=宋體 size=2>qsort<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD> <TD><FONT face=宋體 size=2>#include<stdlib.h><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>定義函數(shù) </FONT></DIV></TD> <TD><FONT face=宋體 size=2>void *bsearch(const void *key,const void *base,size_t nmemb,size_tsize,int (*compar) (const void*,const void*));<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>函數(shù)說明 </FONT></DIV></TD> <TD><FONT face=宋體 size=2>bsearch()利用二元搜索從排序好的數(shù)組中查找數(shù)據(jù)。參數(shù)key指向欲查找的關(guān)鍵數(shù)據(jù),參數(shù)base指向要被搜索的數(shù)組開頭地址,參數(shù)nmemb 代表數(shù)組中的元素?cái)?shù)量,每一元素的大小則由參數(shù)size決定,最后一項(xiàng)參數(shù)compar 為一函數(shù)指針,這個函數(shù)用來判斷兩個元素之間的大小關(guān)系,若傳給compar 的第一個參數(shù)所指的元素?cái)?shù)據(jù)大于第二個參數(shù)所指的元素?cái)?shù)據(jù)則必須回傳大于0 的值,兩個元素?cái)?shù)據(jù)相等則回傳0。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>附加說明 </FONT></DIV></TD> <TD><FONT face=宋體 size=2>找到關(guān)鍵數(shù)據(jù)則返回找到的地址,如果在數(shù)組中找不到關(guān)鍵數(shù)據(jù)則返回NULL。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>范例 </FONT></DIV></TD> <TD><FONT face=宋體 size=2>#include<stdio.h><BR>#include<stdlib.h><BR>#define NMEMB 5<BR>#define SIZE 10<BR>int compar(const void *a,const void *b)<BR>{<BR>return (strcmp((char *)a,(char *)b));<BR>}<BR>main()<BR>{<BR>char data[50][size]={“l(fā)inux”,”freebsd”,”solaris”,”sunos”,”windows”};<BR>char key[80],*base ,*offset;<BR>int i, nmemb=NMEMB,size=SIZE;<BR>while(1){<BR>printf(“>”);<BR>fgets(key,sizeof(key),stdin);<BR>key[strlen(key)-1]=’\0’;<BR>if(!strcmp(key,”exit”))break;<BR>if(!strcmp(key,”list”)){<BR>for(i=0;i<nmemb;i++)<BR>printf(“%s\n”,data[i]);<BR>continue;<BR>}<BR>base = data[0];<BR>qsort(base,nmemb,size,compar);<BR>offset = (char *) bsearch(key,base,nmemb,size,compar);<BR>if( offset = =NULL){<BR>printf(“%s not found!\n”,key);<BR>strcpy(data[nmemb++],key);<BR>printf(“Add %s to data array\n”,key);<BR>}else{<BR>printf(“found: %s \n”,offset);<BR>}<BR>}<BR>}<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>執(zhí)行 </FONT></DIV></TD> <TD><FONT face=宋體 size=2>>hello /*輸入hello字符串*/<BR>hello not found! /*找不到hello 字符串*/<BR>add hello to data array /*將hello字符串加入*/<BR>>.list /*列出所有數(shù)據(jù)*/<BR>freebsd<BR>linux<BR>solaris<BR>sunos<BR>windows<BR>hello<BR>>hello<BR>found: hello<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><BR><FONT face=宋體 size=2><A name=linuxc127></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD> <TD><FONT face=宋體 size=2><BR>lfind(線性搜索) </FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>相關(guān)函數(shù) </FONT></DIV></TD> <TD><FONT face=宋體 size=2>lsearch<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD> <TD><FONT face=宋體 size=2>#include<stdlib.h><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>定義函數(shù) </FONT></DIV></TD> <TD><FONT face=宋體 size=2>void *lfind (const void *key,const void *base,size_t *nmemb,size_t<BR>size,int(* compar) (const void * ,const void *));<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>函數(shù)說明 </FONT></DIV></TD> <TD><FONT face=宋體 size=2>lfind()利用線性搜索在數(shù)組中從頭至尾一項(xiàng)項(xiàng)查找數(shù)據(jù)。參數(shù)key指向欲查找的關(guān)鍵數(shù)據(jù),參數(shù)base指向要被搜索的數(shù)組開頭地址,參數(shù)nmemb代表數(shù)組中的元素?cái)?shù)量,每一元素的大小則由參數(shù)size決定,最后一項(xiàng)參數(shù)compar為一函數(shù)指針,這個函數(shù)用來判斷兩個元素是否相同,若傳給compar 的異地個參數(shù)所指的元素?cái)?shù)據(jù)和第二個參數(shù)所指的元素?cái)?shù)據(jù)相同時則返回0,兩個元素?cái)?shù)據(jù)不相同則返回非0值。Lfind()與lsearch()不同點(diǎn)在于,當(dāng)找不到關(guān)鍵數(shù)據(jù)時lfind()僅會返回NULL,而不會主動把該筆數(shù)據(jù)加入數(shù)組尾端。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>返回值 </FONT></DIV></TD> <TD><FONT face=宋體 size=2>找到關(guān)鍵數(shù)據(jù)則返回找到的該筆元素的地址,如果在數(shù)組中找不到關(guān)鍵數(shù)據(jù)則返回空指針(NULL)。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>范例 </FONT></DIV></TD> <TD><FONT face=宋體 size=2>參考lsearch()。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><BR><FONT face=宋體 size=2><A name=linuxc128></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD> <TD><FONT face=宋體 size=2><BR>lsearch(線性搜索) </FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>相關(guān)函數(shù) </FONT></DIV></TD> <TD><FONT face=宋體 size=2>lfind<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD> <TD><FONT face=宋體 size=2>#include<stdlib.h><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>定義函數(shù) </FONT></DIV></TD>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -