c语⾔中各种函数的作⽤,C语⾔常⽤函数⽤法⼤全
C语⾔是当中⼴泛的计算机编程语⾔,是所有计算机编程语⾔的祖先,其他计算机编程语⾔包括当前流⾏的Java语⾔,都是⽤C语⾔实现的,C语⾔是编程效率⾼的计算机语⾔,既能完成上层应⽤开发,也能完成底层硬件驱动编程,在计算机程序设计当中,特别是在底层硬件驱动开发当中,具有不可替代的作⽤。在C语⾔学习过程当中,除了学习好C语⾔基本语法外,掌握常⽤的C语⾔库函数的使⽤也是⾮常重要的,本⽂主要给同学们详细讲解在实际项⽬开发过程中常⽤C语⾔函数的⽤法。
1 printf 函数
函数原型:int printf(const char *format,[argument]);
功能:实现格式化输⼊输出
返回值:实际输出的字符个数
函数参数:format 格式化字符串
argument 要输出的参数
常⽤的格式化类型有:
d 有符号10进制整数
o ⽆符号8进制整数
u ⽆符号10进制整数
x ⽆符号的16进制数字,并以⼩写abcdef表⽰
X ⽆符号的16进制数字,并以⼤写ABCDEF表⽰
f 浮点数
c 单个字符
s 字符串
p 显⽰⼀个指针,near指针表⽰为:XXXX,far指针表⽰为:XXXX:YYYY
⽤法举例:
以10进制形式输出整形变量a的值;
int a = 100;
printf("a=%d\n", a);
上⾯程序的执⾏结果为:在屏幕终端输出 a=100
2 fprintf函数
函数原型:int fprintf (FILE* stream, const char*format, [argument])
功能:将按照格式化字符串格式化后的数据输出到⽂件流stream中,
返回值:实际写⼊到⽂件的字符个数
函数参数:stream 要输出的⽂件流指针
format 格式化字符串
argument 要输出的参数
备注:fprintf和printf函数⾮常类似,使⽤⽅法也相同,它们不同之处在于printf函数是输出结果到标准
输出终端,⼀般为屏幕,⽽fprintf 是将结果输出到指定的⽂件流;如果将参数输出⽂件流stream设置为标准输出流stdout,则与printf函数等效,如下所⽰:
fprintf (stdout, const char*format, [argument])
⽤法举例:
例如:将⼀个格式化字符串写⼊到⽂件中
FILE *fp = fopen("","wb");
int count = 190;
fprintf(fp,"hello :%d\n", count);
上⾯程序的执⾏结果为往⽂件中写⼊ "hello :190" 字符串.
3 sprintf 函数
函数原型:int sprintf (char* buffer, const char*format, [argument])
功能:将按照格式化字符串格式化后的数据输出到字符串buffer中
返回值:实际输出到字符串buffer的字符个数
函数参数:buffer 要输出的字符串指针
format 格式化字符串
argument 要输出的参数
备注:sprintf和printf函数⾮常类似,使⽤⽅法也相同,它们不同之处在于printf函数是输出结果到标准输出终端,⼀般为屏幕,⽽sprintf 是将结果输出到指定的字符串buffer;
⽤法举例:
将⼀个格式化字符串写⼊到⽬标字符串buffer中
char buffer[50] = {0};
int count = 190;
fprintf(buffer,"hello :%d\n", count);
上⾯程序执⾏后,buffer中保存字符串 "hello :190"
4 scanf 函数
函数原型:int scanf(char *format [,argument,...])
功能:从标准输⼊设备(⼀般指键盘)实现格式化输⼊
返回值:成功返回读⼊的数据项个数
函数参数:format 格式化字符串
argument 输⼊数据项的地址列表
常⽤格式类型参考printf函数的个格式类型
⽤法举例:
从标准输⼊设备中输⼊⼀个整数到整形变量a中,输⼊⼀个浮点数到浮点型变量b中
int a=0;
float b=0;
scanf("%d%f",&a,&b);
上⾯程序执⾏后,从键盘输⼊: 19 18.6 ,程序将 19赋值给变量a, 18.6赋值给变量b .
备注: scanf 函数格式化字符串中不能加 \n,如上例中这样写 scanf("%d%f\n",&a,%b) 是错误的。
5 sscanf 函数
函数原型:int sscanf(const char *buffer, char *format [,argument,...])
功能:读取格式化字符串中的位置
返回值:成功返回读⼊的数据项个数
函数参数:buffer 要读取的格式化字符串
format 格式化字符串
argument 输⼊数据项的地址列表
备注: sscanf函数的使⽤和scanf函数⾮常类似,它们之间的区别在于 scanf函数是从标准输⼊设备输⼊,⽽sscanf 是从指定的字符串输⼊;
⽤法举例:
通常使⽤sscanf函数类实现数据类型转换,将字符串转换为整形或浮点型数据,举例如下:
char str[]="0x1a";
int b=0;
sscanf(str,"0x%x",&b);
上⾯程序的执⾏结果将字符串0x1a 转换成对应的16进制值保存到变量b中 .
6 getchar 函数
函数原型: int getchar(void)
功能: getchar 函数的功能是从标准输⼊设备读取下⼀个字符,包括回车换⾏符都能读取
返回值: 成功返回⽤户输⼊字符对应的ASCII码,失败返回 -1;
函数参数: ⽆fprintf作用
备注: getchar 函数实质是从标准输⼊设备缓冲区读取⼀个字符,⽤户调⽤ getchar 函数的时候,如果标准输⼊缓冲区没有数据,则等待⽤户从键盘输⼊;否则,直接从标准输⼊缓冲区读取⼀个字符,⽽不等待⽤户从键盘输⼊;请看下⾯的例⼦:
int a = 0;
char b = 0;
scanf("%d", &a);
b=getchar();
在上⾯代码中,我们⾸先调⽤ scanf 函数从键盘输⼊⼀个整数到变量a中,接着调⽤getchar函数从键盘输⼊⼀个字符到变量b中;但实际运⾏时,我们会发现输⼊整数变量a后,程序并没有停下来让我们输⼊字符变量b,这是因为我们在输⼊整形变量a后,输⼊缓冲区中保存了回车符,程序在执⾏getchar函数时,发现输⼊缓冲区中有回车符,直接读取了输⼊缓冲区中的回车符,⽽不再等待⽤户从键盘输⼊.解决办法是,在调⽤函数getchar输⼊字符之前,先清空缓冲区,
如下所⽰:
int a = 0;
char b = 0;
scanf("%d", &a);
while(getchar()!='\n'); //清空输⼊缓冲区
b=getchar();
上⾯程序中,在调⽤getchar()函数从键盘读取字符之前,先执⾏语句while(getchar()!='\n'); 清空输⼊缓冲区.
⽤法举例:
从标准输⼊设备输⼊⼀个字符到字符变量 s 中
char s = 0;
s = getchar();
7 fgets 函数
函数原型: char *fgets(char *buf, int bufsize, FILE *stream);
功能: 从⽂件流stream中读取数据,每次读取⼀⾏。读取的数据保存在buf指向的字符数组中。
返回值: 函数执⾏成功返回buf
失败或读到⽂件结尾返回NULL
函数参数:buf ,字符指针,⽤来存取所读取的数据;
bufsize, 整数,buf缓冲区的⼤⼩;
stream, FILE指针,表⽰将要读取的⽂件流;
备注:使⽤ fgets函数读取⽂件流数据的时候,每次多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果⽂件中的该⾏,不⾜bufsize个字符,则读完该⾏就结束。如若该⾏(包括后⼀个换⾏符)的字符数超过bufsize-1,则fgets只返回⼀个不完整的⾏,但是,缓冲区总是以NULL字符结尾,对fgets的下⼀次调⽤会继续读该⾏。如果stream设置为标准输⼊流 stdin,则表⽰从标准输⼊设备键盘读取⼀⾏数据;
⽤法举例:
从标准输⼊设备读取⼀⾏字符串到字符数组 str中
char str[100] = {0};
fgets(str,100,stdin);
printf("%s\n",str);
8 memset 函数
函数原型: void *memset(void *buffer, int ch, size_t count)
功能: 将buffer中当前位置后⾯的count个字节⽤ ch 替换
返回值: 返回 buffer
函数参数: buffer 指针或数组,内存缓冲区的⾸地址
ch 赋给 buffer的值
count buffer的长度
备注: memset函数按字节对内存块进⾏初始化,实际项⽬开发过程中,我们通常使⽤memset来对⼀块内存进⾏清0或填充某⼀个特定的值;它是对较⼤的结构体或数组进⾏清零操作的⼀种快⽅法。
⽤法举例: 使⽤memset函数对数组清0
char strbuf[1000];
memset(strbuf,0,1000);
9 memcpy 函数
函数原型: void *memcpy(void *dest, const void *src, size_t n)
功能: 由src指向地址为起始地址的连续n个字节的数据复制到以dest指向地址为起始地址的空间内。
返回值: 函数返回⼀个指向dest的指针
函数参数: dest ⽬标数据缓冲区起始地址
src 源数据缓冲区起始地址
n 要复制的字节数
备注: 由于函数拷贝的过程是⼀个字节⼀个字节的拷贝的,所以实际操作的时候要把void*强制转化为c
har*,这样在指针加的时候才会保证每次加⼀个字节.在实际项⽬中,通常使⽤memcpy函数来给结构体变量赋值.
⽤法举例: 使⽤memcpy函数将struct sockaddr_in 结构体变量 addr赋值给addrx
memcpy((char *)&addr,(char *)&addrx, sizeof(struct sockaddr_in))
以上就是今天我要给同学讲解的常⽤C语⾔函数的使⽤,当然C语⾔的库函数还有很多,这⾥我们就不⼀⼀列举了,希望对同学们能有所帮助。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论