C语言中常用函数大全.docx_第1页
C语言中常用函数大全.docx_第2页
C语言中常用函数大全.docx_第3页
C语言中常用函数大全.docx_第4页
C语言中常用函数大全.docx_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

(一)输入输出常用函数1,printf(1)有符号int%-+0width.precisionlh d-:左对齐+:正数前加+0:右对齐,acwidth.precision,按实际输出,否者左边补零(2)无符号int%-#0width.precisionlh u|o|x|X#:”%o %x/X”输出0,0x,0X.precision:同上,TC/BC包含0x/X,VC下不包含(3)实数输出%-+#0width.precisionlL f|e|E|g|G#:必须输出小数点.precision:小数位数(四舍五入)(4)字符和字符串的输出%-0width c %-0width .precision s.precision:S的前precision位2,scanf%*width lhTypeWith:指定输入数据的宽度,遇空格、Tab、n结束*:抑制符scanf(“%2d%*2d%3d”,&num1,&num2) 输入123456789n;num1=12,num2=567.注意:(1)指定width时,读取相应width位 ,但按需赋值Scanf(“%3c%3c”,&ch1,&ch2) 输入abcdefg ch1=a ch2=d(2)%c 输入单字符时“空格、转义字符”均是有效字符 (二)ascll字符/字符串/文件函数1;字符非格式化输入函数(1)int getchar(void) 接受字符,以回车结束,回显(2)int getc(FILE*stream) 从stream中接受字符,以回车结束,回显stream=stdin时,(1)=(2)(3)int getche(void) 直接读取字符,回显conio.h(4)int getchar(void) 直接读取字符,不回显conio.h注意:(1,2)对于回车键返回n (3,4)对于回车键返回r2;字符/串非格式化输出函数(1)int putchar(int c) 正常返回字符代码值,出错返回EOF(2)int putc(int c,FILE*stream) 正常返回字符代码值,出错返回EOF stream=stdout(1)=(2)(3)int puts(char*stream) 自动回车换行1;字符串的赋值#includeVoid *memset (void *s, char ch, unsigned n)将以S为首地址的,一片连续的N个字节 内存单元 赋值为CH.Void *memcpy ( void *d, void*s, unsigned n)将以S为首地址的 一片连续的N个字节 内存单元的值拷贝到 以D为首地址的一片连续的内存单元中。(对于数据类型、大小相同的数组可以用此函数拷贝/部分拷贝)2;#include(1)strlen ( 求字符串长度)求字符串长度,从给定的字符串的起始地址开始,到第一个0为止(不包含0)。转义字符 ddd、xhh;看做一个字符。(2)字符串的复制Strcpy(字符数组1,字符串2);将字符串2,复制到字符数组1中(包含0);1要足够大。1:必须为字符数组变量 2字符数组变量 或 字符串常量strncpy(字符数组1,字符串2,长度n)将2中的 前N个字符复制到1中,并在末尾加0;n=strlen(2)时 ,其等价strcpy。(4)字符串的比较12 返回正数 1=2 返回0 12 返回负数 比较规则:逐个比较字符的ASCII码值,直到遇到不同的字符 或 0。Strcmp(字符串1,字符串2) Stricmp/Strcmpi (字符串1,字符串2)“不区分大小写”Strncmp(字符串1,字符串2,长度n)将字符串1前N个字符与字符串2前N个字符进行比较(n足够大时等价strcmp)Strincmp(字符串1,字符串2,长度n)(5)字符串的连接Strcat(字符串1,字符串2)将2连接到1后面(包含0);1要足够大。Strncat(字符串1,字符串2,unsigned int count)将2的前N个字符连接到1后面以0结束;3;动态分配内存include(1)void *calloc(unsigned n, unsigned size); 功 能: 在内存的动态存储区中分配n个长度为size的连续空间,并且赋初值为0(malloc侧不是);函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。(2) 原型:extern void *realloc(void *mem_address, unsigned int newsize)语法:指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。/新的大小一定要大于原来的大小不然的话会导致数据丢失! 头文件:#include 有些编译器需要#include ,在TC2.0中可以使用alloc.h头文件 功能:先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域,同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。 返回值:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。 注意:这里原始内存中的数据还是保持不变的。当内存不再使用时,应使用free()函数将内存块释放。(三)文件函数mode:r:打开已存在文件,准备从文件中读取数据,不能写入r+ :可读可写w:创建一个新文件,准备写入;如文件已存在,此文件将被空文件覆盖w+:增加“读取”操作a:打开已存在文件,准备在文件尾部追加数据,不能读取。 如文件不存在,侧创建此文件,准备写入。a+:增加“读取”t:打开一个文本文件(缺省值)b:打开一个二进制文件一:文件的打开与关闭1:打开文件FILE * fopen(char*filename, char*mode)Filename:是字符串,表示打开的文件名,文件名前可以带路径。Mode:也是字符串,表示打开文件的方式。功能-按指定方式打开文件。返回值-如果文件打开成功,返回“文件结构体指针”,否者返回NULL(如:文件不存在或则写文件时不能创建)。Fopen(“A:userasd.txt”,”r+”);2:关闭文件Int*fclose(FILE*filename)正常关闭返回0;否者返回 非0。3:Int feof(FILE*filepointer)功能-在执行文件操作时,遇到文件尾,返回1;否则返回0;Eg. !feof(fp1)表示源文件(用于输入)未结束,循环继续。此函数适用于ASCII码文件盒二进制文件。EOF是文本文件结束的标志。在文本文件中,数据是以字符的ASC代码值的形式存放,普通字符的ASC代码的范围是32到127(十进制),EOF的16进制代码为0x1A(十进制为26),因此可以用EOF作为文件结束标志。当把数据以二进制形式存放到文件中时,就会有-1值的出现,因此不能采用EOF作为二进制文件的结束标志。为解决这一个问题,ASCI C提供一个feof函数,用来判断文件是否结束。feof函数既可用以判断二进制文件又可用以判断文本文件。“C”语言的“feof()”函数和数据库中“eof()”函数的运作是完全不同的。数据库中“eof()”函数读取当前指针的位置,“C”语言的“feof()”函数返回的是最后一次“读操作的内容”。多年来把“位置和内容”相混,从而造成了对这一概念的似是而非。那么,位置和内容到底有何不同呢?举个简单的例子,比如有人说“你走到火车的最后一节车箱”这就是位置。而如果说“请你一直向后走,摸到铁轨结束”这就是内容。也就是说用内容来判断会“多走一节”。这就是完全依赖于“while(!feof(FP).”进行文件复制时,目标文档总会比源文档“多出一些”的原因。二:文件的读写1:字符读写函数fgetc和fputc(1):int fgetc (FILE*filepointer)功能-从文件指针filepointer指向的文件中,读入一个字节(字符),同时将读写位置指针向前移动一个字节。返回值-如果读取正常,返回读到的的字节值;如果读到文件尾或出错;侧返回EOF。fgetc函数返回的值是int类型,如果强制的赋值给char类型,会导致当读出的数据为0xff时,误认为是EOF(-),导致程序出错。(2):Int fputc(int c,FILE*filepointer)功能-将字符c输出到文件指针filepointer所指的文件中去;同时将读写位置指针向前移动一个字节。返回值-成功、返回字符数据c;否者返回EOF。2:字符串读写函数fgets和fputs(1): Char *fgets(char*s ,int n ,FILE*filrpointer)Cahr*s可以是“字符数组名”也可是“字符串”(别的类似的函数也是如此)功能-从文件指针filepointer指向的文件中,读取长度最大为n-1的字节串,并在字符串的末尾加上结束标志0;然后将字符串放在s中,同时读写位置指针向前移动,实际读写的字串长度(当前位置指针到文尾的偏移时)使位置指针至尾的,不能写入内容,否则文件结尾符将被覆盖,文件变大/文件损坏将无法打开!当offset是向文件头方向偏移的时候,如果offset没有超出文件头,是正常偏移,文件指针指向正确的偏移地址,fseek返回值为0.当offset超出文件头时,fseek返回出错-1值,文件指针不变还是处于原来的地址。 (3):ftell函数Long ftell(FILE*filepointer)文件位置指针的最小值是0,最大值是文件的长度。功能-返回filepointer所指向文件当前位置指针的值(用相对文件开头的位移量表示)。返回值-成功,返回:当前位置指针的值;出错,返回:-1L。(三)文件夹函数1、文件夹/文件的判断函数access头文件:io.h功 能: 确定文件或文件夹的访问权限。即,检查某个文件的存取方式,比如说是只读方式、只写方式等。如果指定的存取方式有效,则函数返回0,否则函数返回-1。用 法: int access(const char *filenpath, int mode); 或者int _access( const char *path, int mode );备注:(filenpath)当该参数为文件的时候,access函数能使用mode参数所有的值,当该参数为文件夹的时候,access函数值能判断文件夹是否存在。在WIN NT 中,所有的文件夹都有读和写权限 Mode: 0 (F_OK) 只判断是否存在2 (R_OK) 判断写入权限4 (W_OK) 判断读取权限6 (X_OK) 判断执行权限若存在或者具有权限,返回值为0;不存在或者无权限,返回值为-1。特别提醒:fopen用这种方法做出的判断是不完全正确的,因为有的文件存在,但是可能不可读。错误代码EACCESS 参数pathname 所指定的文件不符合所要求测试的权限。EROFS 欲测试写入权限的文件存在于只读文件系统内。EFAULT 参数pathname指针超出可存取内存空间。EINVAL 参数mode 不正确。ENAMETOOLONG 参数pathname太长。ENOTDIR 参数pathname为一目录。ENOMEM 核心内存不足ELOOP 参数pathname有过多符号连接问题。EIO I/O 存取错误。特别提醒:使用access()作用户认证方面的判断要特别小心,例如在access()后再做open()的空文件可能会造成系统安全上的问题。2.C语言创建目录、文件夹1. 调用Windows API函数 CreateDirectory():CreateDirectory(D:MyDir, NULL);2. 调用C运行库函数mkdir(): #includemkdir(D:MyDir);VS/TC中可用VC+6.0用 法: int _mkdir( const char *dirname );头文件库:direct.h返回值:创建一个目录,若成功则返回0,否则返回-13. 调用system命令md:system(md D:MyDir);4.打开文件夹system(explorer.exe F:lou1);/ system(explorer F:lou1);3.判断文件大小unsigned long getfilesize(char*str)struct stat f_stat;if(stat(str,&f_stat)=-1)return -1;return(unsigned long)f_stat.st_size; /*返回的文件里的字符数(B),缺点是最多只能表示大约4G的文件,因返回值是unsigned long*/(四)struct stat 作用stat,lstat,fstat1 函数都是获取文件(普通文件,目录,管道,socket,字符,块()的属性。函数原型#include int stat(const char *restrict pathname, struct stat *restrict buf);提供文件名字,获取文件对应属性。int fstat(int filedes, struct stat *buf);通过文件描述符获取文件对应的属性。int lstat(const char *restrict pathname, struct stat *restrict buf);连接文件描述命,获取文件属性。2 文件对应的属性struct stat mode_t st_mode; /文件对应的模式,文件,目录等ino_t st_ino; /inode节点号dev_t st_dev; /设备号码dev_t st_rdev; /特殊设备号码nlink_t st_nlink; /文件的连接数uid_t st_uid; /文件所有者gid_t st_gid; /文件所有者对应的组off_t st_size; /普通文件,对应的文件字节数time_t st_atime; /文件最后被访问的时间time_t st_mtime; /文件内容最后被修改的时间time_t st_ctime; /文件状态改变时间blksize_t st_blksize; /文件内容对应的块大小blkcnt_t st_blocks; /伟建内容对应的块数量time_t st_atime; /* time of last access -最近存取时间*/ time_t st_mtime; /* time of last modification -最近修改时间*/ time_t st_ctime; /* time of last status change - */ ;-#include #inlcude #include int fstat(int filedes,struct stat *buf);int stat(const char *path,struct stat *buf);int lstat(const char *path,struct stat *buf);这三个系统调用都可以返回指定文件的状态信息,这些信息被写到结构struct stat的缓冲区中。通过分析这个结构可以获得指定文件的信息。fstat区别于另外两个系统调用的地方在于,fstat系统调用接受的是 一个“文件描述符”,而另外两个则直接接受“文件全路径”。文件描述符是需要我们用open系统调用后才能得到的,而文件全路经直接写就可以了。stat和lstat的区别:当文件是一个符号链接时,lstat返回的是该符号链接本身的信息;而stat返回的是该链接指向的文件的信息。(似乎有些晕吧,这样记,lstat比stat多了一个l,因此它是有本事处理符号链接文件的,因此当遇到符号链接文件时,lstat当然不会放过。而 stat系统调用没有这个本事,它只能对符号链接文件睁一只眼闭一只眼,直接去处理链接所指文件喽)void report(struct stat *ptr)printf(The major device no is:%dn,major(ptr-st_dev);/主设备号printf(The minor device no is:%dn,minor(ptr-st_dev);/从设备号printf(The files node number is:%dn,ptr-st_ino);/文件节点号printf(The files access mode is:%dn,ptr-st_mode);/文件的访问模式printf(The files hard link number is:%dn,ptr-st_nlink);/文件的硬链接数目printf(The files user id is:%dn,ptr-uid);/文件拥有者的IDprintf(The files group id is:%dn,ptr-gid);/文件的组IDprintf(The files size is:%dn,ptr-st_size);/文件的大小printf(The block size is:%dn,ptr-blksize);/文件占用的块数量printf(The number of allocated blocks is:%dn,ptr-st_blocks);/文件分配块数量struct tm*accesstime,*lmodifytime,*lchangetime;/访问时间,修改时间,最后一个改变时间(属性)accesstime=localtime(&(ptr-st_atime);accesstime=localtime(&(ptr-st_mtime);accesstime=localtime(&(ptr-st_ctime);printf(The last access time is: %d:%d:%dn,accesstime-hour,accesstime-min,accesstime-sec);printf(The last modify time is:%d:%d:%dn,lmodifytime-hour,lmodifytime-min,lmodifytime-sec);printf(The last change time is:%d:%d:%dn,lchangetime-hour,lchangetime-min,lchangetime-sec);结构time_t可用用localtime转换成tm结构,获得本地时间。(五)随机数发生器1. rand和srand srand随机数发生器的 初始化函数 void srand(unsigned int seed);rand伪随机数发生器 int rand(void); 如不用srand(unsigned int)time(NULL);程序会默认调用srand(1);如果要取得a,b)之间的数,则 num = rand()%(b-a) + a; 伪浮点随机数a,b) fnum = rand() /(double)(RAND_MAX/(b-a) + a; /RAND_MAX=215-1注:a,b均为整数,a != b,且a = 0;用rand() / double(RAND_MAX)可以取得01之间的浮点数(注意,不同于整型时候的公式,是除以,不是求模),举例:double r=0.0;srand(unsigned)time(0);for(int i=0;i10;i+)r = rand() / (double)(RAND_MAX);coutran_numf ;例:#include stdio.h #include stdlib.h #include time.h int main(void) int i; srand(unsigned int)time(NULL); /*srand(unsigned int)_getpid(); 得到当前进程数*/ printf(Ten random numbers from 0 to 99nn); for(i=0; i10; i+) printf(%dn, rand() % 100); return 0; 2.srandom和random函数(官方推荐VCVS中不能用TC可以,C/C+没此函数)srandom 初始化函数 void srandom(unsigned int seed); random伪随机数发生器 long int random(void); srandom设置种子值,一般与“当前时间 + 进程ID”作为种子,如果没用调用该函数,则通过random返回的默认种子值为1。#include #include int main( void )printf( Process id: %dn, _getpid() );/获取进程ID int _getpid( void )函数说明:getpid函数用来取得目前进程的进程识别码,许多程序利用取到的此值来建立临时文件,以避免临时文件相同带来的问题。返回值:目前进程的进程识别码fork 创建新进程;exit 终止进程;exec 执行一个应用程序wait 将父进程挂起,等待子进程终止;getpid 获取当前进程的PID;nice 改变进程的优先3.函数名:time 头文件:time.h 函数原型:time_t time(time_t * timer) 功能: 获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。然后调用localtime将time_t所表示的CUT时间转换为本地时间(我们是+8区,比CUT多8个小时)并转成struct tm类型,该类型的各数据成员分别表示年月日时分秒。 补充说明:time函数的原型也可以理解为 long time(long *tloc),即返回一个long型整数。因为在time.h这个头文件中time_t实际上就是: #ifndef _TIME_T_DEFINED typedef long time_t; /* time value */ #define _TIME_T_DEFINED /* avoid multiple defines of time_t */ #endif 即long。 用time()函数结合其他函数(如:localtime、gmtime、asctime、ctime)可以获得当前系统时间或是标准时间。 #include #include #include int main(void) time_t timer; /time_t就是long int 类型 struct tm *tblock; timer = time(NULL); /这一句也可以改成time(&timer); tblock = localtime(&timer); printf(Local time is: %sn,asctime(tblock); /输出:Sun Mar 31 23:59:01 2013return 0; 在标准C/C+中,我们可通过tm结构来获得日期和时间,tm结构在time.h中的定义如下:#ifndef _TM_DEFINEDstruct tm int tm_sec; /* 秒取值区间为0,59 */int tm_min; /* 分 - 取值区间为0,59 */int tm_hour; /* 时 - 取值区间为0,23 */int tm_mday; /* 一个月中的日期 - 取值区间为1,31 */int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为0,11 */int tm_year; /* 年份,其值从1900开始 */int tm_wday; /* 星期取值区间为0,6,其中0代表星期天,1代表星期一,以此类推 */int tm_yday; / * 从每年的1月1日开始的天数取值区间为0,365,其中0代表1月1日,1代表1月2日,以此类推 */int tm_isdst; /* 夏令时标识

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论