| crypt(将密码或数据编码) |
相关函数 | getpassDVGLinux联盟
|
表头文件 | #define _XOPEN_SOURCEDVGLinux联盟 #include<unistd.h>DVGLinux联盟
|
定义函数 | char * crypt (const char *key,const char * salt);DVGLinux联盟
|
函数说明 | crypt()将使用Data Encryption Standard(DES)演算法将参数key所指的字符串加以编码,key字符串长度仅取前8个字符,超过此长度的字符没有意义。参数salt为两个字符组成的字符串,由a-z、A-Z、0-9,“.”和“/”所组成,用来决定使用4096 种不同内建表格的哪一个。函数执行成功后会返回指向编码过的字符串指针,参数key 所指的字符串不会有所更动。编码过的字符串长度为13 个字符,前两个字符为参数salt代表的字符串。DVGLinux联盟
|
返回值 | 返回一个指向以NULL结尾的密码字符串。DVGLinux联盟
|
附加说明 | 使用GCC编译时需加-lcrypt。DVGLinux联盟
|
范例 | #include<unistd.h>DVGLinux联盟 main()DVGLinux联盟 {DVGLinux联盟 char passwd[13];DVGLinux联盟 char *key;DVGLinux联盟 char slat[2];DVGLinux联盟 key= getpass(“Input First Password:”);DVGLinux联盟 slat[0]=key[0];DVGLinux联盟 slat[1]=key[1];DVGLinux联盟 strcpy(passwd,crypt(key slat));DVGLinux联盟 key=getpass(“Input Second Password:”);DVGLinux联盟 slat[0]=passwd[0];DVGLinux联盟 slat[1]=passwd[1];DVGLinux联盟 printf(“After crypt(),1st passwd :%s\n”,passwd);DVGLinux联盟 printf(“After crypt(),2nd passwd:%s \n”,crypt(key slat));DVGLinux联盟 }DVGLinux联盟
|
执行 | Input First Password: /* 输入test,编码后存于passwd[ ] */DVGLinux联盟 Input Second Password /*输入test,密码相同编码后也会相同*/DVGLinux联盟 After crypt () 1st Passwd : teH0wLIpW0gyQDVGLinux联盟 After crypt () 2nd Passwd : teH0wLIpW0gyQDVGLinux联盟
|
| |
DVGLinux联盟
| DVGLinux联盟 bsearch(二元搜索) |
相关函数 | qsortDVGLinux联盟
|
表头文件 | #include<stdlib.h>DVGLinux联盟
|
定义函数 | void *bsearch(const void *key,const void *base,size_t nmemb,size_tsize,int (*compar) (const void*,const void*));DVGLinux联盟
|
函数说明 | bsearch()利用二元搜索从排序好的数组中查找数据。参数key指向欲查找的关键数据,参数base指向要被搜索的数组开头地址,参数nmemb 代表数组中的元素数量,每一元素的大小则由参数size决定,最后一项参数compar 为一函数指针,这个函数用来判断两个元素之间的大小关系,若传给compar 的第一个参数所指的元素数据大于第二个参数所指的元素数据则必须回传大于0 的值,两个元素数据相等则回传0。DVGLinux联盟
|
附加说明 | 找到关键数据则返回找到的地址,如果在数组中找不到关键数据则返回NULL。DVGLinux联盟
|
范例 | #include<stdio.h>DVGLinux联盟 #include<stdlib.h>DVGLinux联盟 #define NMEMB 5DVGLinux联盟 #define SIZE 10DVGLinux联盟 int compar(const void *a,const void *b)DVGLinux联盟 {DVGLinux联盟 return (strcmp((char *)a,(char *)b));DVGLinux联盟 }DVGLinux联盟 main()DVGLinux联盟 {DVGLinux联盟 char data[50][size]={“linux”,”freebsd”,”solaris”,”sunos”,”windows”};DVGLinux联盟 char key[80],*base ,*offset;DVGLinux联盟 int i, nmemb=NMEMB,size=SIZE;DVGLinux联盟 while(1){DVGLinux联盟 printf(“>”);DVGLinux联盟 fgets(key,sizeof(key),stdin);DVGLinux联盟 key[strlen(key)-1]=’\0’;DVGLinux联盟 if(!strcmp(key,”exit”))break;DVGLinux联盟 if(!strcmp(key,”list”)){DVGLinux联盟 for(i=0;i<nmemb;i++)DVGLinux联盟 printf(“%s\n”,data[i]);DVGLinux联盟 continue;DVGLinux联盟 }DVGLinux联盟 base = data[0];DVGLinux联盟 qsort(base,nmemb,size,compar);DVGLinux联盟 offset = (char *) bsearch(key,base,nmemb,size,compar);DVGLinux联盟 if( offset = =NULL){DVGLinux联盟 printf(“%s not found!\n”,key);DVGLinux联盟 strcpy(data[nmemb++],key);DVGLinux联盟 printf(“Add %s to data array\n”,key);DVGLinux联盟 }else{DVGLinux联盟 printf(“found: %s \n”,offset);DVGLinux联盟 }DVGLinux联盟 }DVGLinux联盟 }DVGLinux联盟
|
执行 | >hello /*输入hello字符串*/DVGLinux联盟 hello not found! /*找不到hello 字符串*/DVGLinux联盟 add hello to data array /*将hello字符串加入*/DVGLinux联盟 >.list /*列出所有数据*/DVGLinux联盟 freebsdDVGLinux联盟 linuxDVGLinux联盟 solarisDVGLinux联盟 sunosDVGLinux联盟 windowsDVGLinux联盟 helloDVGLinux联盟 >helloDVGLinux联盟 found: helloDVGLinux联盟
|
| |
DVGLinux联盟
| DVGLinux联盟 lfind(线性搜索) |
相关函数 | lsearchDVGLinux联盟
|
表头文件 | #include<stdlib.h>DVGLinux联盟
|
定义函数 | void *lfind (const void *key,const void *base,size_t *nmemb,size_tDVGLinux联盟 size,int(* compar) (const void * ,const void *));DVGLinux联盟
|
函数说明 | lfind()利用线性搜索在数组中从头至尾一项项查找数据。参数key指向欲查找的关键数据,参数base指向要被搜索的数组开头地址,参数nmemb代表数组中的元素数量,每一元素的大小则由参数size决定,最后一项参数compar为一函数指针,这个函数用来判断两个元素是否相同,若传给compar 的异地个参数所指的元素数据和第二个参数所指的元素数据相同时则返回0,两个元素数据不相同则返回非0值。Lfind()与lsearch()不同点在于,当找不到关键数据时lfind()仅会返回NULL,而不会主动把该笔数据加入数组尾端。DVGLinux联盟
|
返回值 | 找到关键数据则返回找到的该笔元素的地址,如果在数组中找不到关键数据则返回空指针(NULL)。DVGLinux联盟
|
范例 | 参考lsearch()。DVGLinux联盟
|
| |
DVGLinux联盟
| DVGLinux联盟 lsearch(线性搜索) |
相关函数 | lfindDVGLinux联盟
|
表头文件 | #include<stdlib.h>DVGLinux联盟
|
定义函数 | void *lsearch(const void * key ,const void * base ,size_t * nmemb,size_t size, int ( * compar) (const void * ,const void *));DVGLinux联盟
|
函数说明 | lsearch()利用线性搜索在数组中从头至尾一项项查找数据。参数key指向欲查找的关键数据,参数base指向要被搜索的数组开头地址,参数nmemb 代表数组中的元素数量,每一元素的大小则由参数size 决定,最后一项参数compar 为一函数指针,这个函数用来判断两个元素是否相同,若传给compar 的第一个参数所指的元素数据和第二个参数所指的元素数据相同时则返回0,两个元素数据不相同则返回非0 值。如果lsearch()找不到关键数据时会主动把该项数据加入数组里。DVGLinux联盟
|
返回值 | 找到关键数据则返回找到的该笔元素的四肢,如果在数组中找不到关键数据则将此关键数据加入数组,再把加入数组后的地址返回。DVGLinux联盟
|
范例 | #include<stdio.h>DVGLinux联盟 #include<stdlib.h>DVGLinux联盟 #define NMEMB 50DVGLinux联盟 #define SIZE 10DVGLinux联盟 int compar (comst void *a,const void *b)DVGLinux联盟 {DVGLinux联盟 return (strcmp((char *) a, (char *) b));DVGLinux联盟 }DVGLinux联盟 main()DVGLinux联盟 {DVGLinux联盟 char data[NMEMB][SIZE]={“Linux”,”freebsd”,”solzris”,”sunos”,”windows”};DVGLinux联盟 char key[80],*base,*offset;DVGLinux联盟 int i, nmemb=NMEMB,size=SIZE;DVGLinux联盟 for(i=1;i<5;i++){DVGLinux联盟 fgets(key,sizeof9key),stdin);DVGLinux联盟 key[strlen(key)-1]=’\0’;DVGLinux联盟 base = data[0];DVGLinux联盟 offset = (char *)lfind(key,base,&nmemb,size,compar);DVGLinux联盟 if(offset ==NULL){DVGLinux联盟 printf(“%s not found!\n”,key);DVGLinux联盟 offset=(char *) lsearch(key,base,&nmemb,size,compar);DVGLinux联盟 printf(“Add %s to data array\n”,offset);DVGLinux联盟 }else{DVGLinux联盟 printf(“found : %s \n”,offset);DVGLinux联盟 }DVGLinux联盟 }DVGLinux联盟 }DVGLinux联盟
|
执行 | linuxDVGLinux联盟 found:linuxDVGLinux联盟 os/2DVGLinux联盟 os/2 not found!DVGLinux联盟 add os/2 to data arrayDVGLinux联盟 os/2DVGLinux联盟 found:os/2DVGLinux联盟
|
| |
DVGLinux联盟
| DVGLinux联盟 qsort(利用快速排序法排列数组) |
相关函数 | bsearchDVGLinux联盟
|
表头文件 | #include<stdlib.h>DVGLinux联盟
|
定义函数 | void qsort(void * base,size_t nmemb,size_t size,int ( * compar)(const void *, const void *));DVGLinux联盟
|
函数说明 | 参数base指向欲排序的数组开头地址,参数nmemb代表数组中的元素数量,每一元素的大小则由参数size决定,最后一项参数compar为一函数指针,这个函数用来判断两个元素间的大小关系,若传给compar的第一个参数所指的元素数据大于第二个参数所指的元素数据则必须回传大于零的值,两个元素数据相等则回传0。DVGLinux联盟
|
返回值 | DVGLinux联盟
|
附加说明 | DVGLinux联盟
|
范例 | #define nmemb 7DVGLinux联盟 #include <stdlib.h>DVGLinux联盟 int compar (const void *a ,const void *b)DVGLinux联盟 {DVGLinux联盟 int *aa=(int * ) a,*bb = (int * )b;DVGLinux联盟 if( * aa >* bb)return 1;DVGLinux联盟 if( * aa == * bb) return 0;DVGLinux联盟 if( * aa < *bb) return -1;DVGLinux联盟 }DVGLinux联盟 main( )DVGLinux联盟 {DVGLinux联盟 int base[nmemb]={ 3,102,5,-2,98,52,18};DVGLinux联盟 int i;DVGLinux联盟 for ( i=0; i<nmemb;i++)DVGLinux联盟 printf(“%d “,base[i]);DVGLinux联盟 printf(“\n”);DVGLinux联盟 qsort(base,nmemb,sizeof(int),compar);DVGLinux联盟 for(i=0;i<nmemb;i++)DVGLinux联盟 printf(“%d”base[i]);DVGLinux联盟 printf(“\n”);DVGLinux联盟 }DVGLinux联盟
|
执行 | 3 102 5 -2 98 52 18DVGLinux联盟 -2 3 5 18 52 98 102DVGLinux联盟
|
| |
DVGLinux联盟
| DVGLinux联盟 rand(产生随机数) |
相关函数 | srand,random,srandomDVGLinux联盟
|
表头文件 | #include<stdlib.h>DVGLinux联盟
|
定义函数 | int rand(void)DVGLinux联盟
|
函数说明 | rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。关于随机数种子请参考srand()。DVGLinux联盟
|
返回值 | 返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,其值为2147483647。DVGLinux联盟
|
范例 | /* 产生介于1 到10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考DVGLinux联盟 srand()*/DVGLinux联盟 #include<stdlib.h>DVGLinux联盟 main()DVGLinux联盟 {DVGLinux联盟 int i,j;DVGLinux联盟 for(i=0;i<10;i++)DVGLinux联盟 {DVGLinux联盟 j=1+(int)(10.0*rand()/(RAND_MAX+1.0));DVGLinux联盟 printf(“%d “,j);DVGLinux联盟 }DVGLinux联盟 }DVGLinux联盟
|
执行 | 9 4 8 8 10 2 4 8 3 6DVGLinux联盟 9 4 8 8 10 2 4 8 3 6DVGLinux联盟
|
| |
DVGLinux联盟
| DVGLinux联盟 srand(设置随机数种子) |
相关函数 | rand,random srandomDVGLinux联盟
|
表头文件 | #include<stdlib.h>DVGLinux联盟
|
定义函数 | void srand (unsigned int seed);DVGLinux联盟
|
函数说明 | srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。DVGLinux联盟
|
返回值 | DVGLinux联盟
|
范例 | /* 产生介于1 到10 间的随机数值,此范例与执行结果可与rand()参照*/DVGLinux联盟 #include<time.h>DVGLinux联盟 #include<stdlib.h>DVGLinux联盟 main()DVGLinux联盟 {DVGLinux联盟 int i,j;DVGLinux联盟 srand((int)time(0));DVGLinux联盟 for(i=0;i<10;i++)DVGLinux联盟 {DVGLinux联盟 j=1+(int)(10.0*rand()/(RAND_MAX+1.0));DVGLinux联盟 printf(“ %d “,j);DVGLinux联盟 }DVGLinux联盟 }DVGLinux联盟
|
执行 | 5 8 8 8 10 2 10 8 9 9DVGLinux联盟 2 9 7 4 10 3 2 10 8 7DVGLinux联盟
|