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])

  用法举例:

  例如:将一个格式化字符串写入到文件file1.txt中

  FILE *fp = fopen("file1.txt","wb");

  int count = 190;

  fprintf(fp,"hello :%d\n", count);

  上面程序的执行结果为往file1.txt文件中写入 "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;

  函数参数: 无

  备注: 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*强制转化为char*,这样在指针加的时候才会保证每次加一个字节.在实际项目中,通常使用memcpy函数来给结构体变量赋值.

  用法举例: 使用memcpy函数将struct sockaddr_in 结构体变量 addr赋值给addrx

  memcpy((char *)&addr,(char *)&addrx, sizeof(struct sockaddr_in))

实际项目开发过程中常用C语言函数的9大用法的更多相关文章

  1. Unity项目开发过程中常见的问题,你遇到过吗?

    最近看到有朋友问一个unity游戏开发团队,需要掌握哪些知识之类的问题.事实上Unity引擎是一个很灵活的引擎,根据团队开发游戏类型的不同,对人员的要求也有差异,所以不能一概而论.但是,一些在Unit ...

  2. Python常用模块中常用内置函数的具体介绍

    Python作为计算机语言中常用的语言,它具有十分强大的功能,但是你知道Python常用模块I的内置模块中常用内置函数都包括哪些具体的函数吗?以下的文章就是对Python常用模块I的内置模块的常用内置 ...

  3. 项目开发过程中什么是开发环境、测试环境、生产环境、UAT环境、仿真环境?

    项目开发过程中什么是开发环境.测试环境.生产环境.UAT环境.仿真环境? 最近在公司项目开发过程中总用到测试环境,生产环境和UAT环境等,然而我对环境什么的并不是很理解它的意思,一直处于开发阶段,出于 ...

  4. php中常用的正则表达式函数

    php中常用的正则表达式函数 * preg_match() * preg_match_all() * preg_replace() * preg_filter() * preg_grep() * pr ...

  5. iOS开发中常用的数学函数

    iOS开发中常用的数学函数 /*---- 常用数学公式 ----*/ //指数运算 3^2 3^3 NSLog(,)); //result 9 NSLog(,)); //result 27 //开平方 ...

  6. Sql 中常用时间处理函数

    1.Sql 中常用时间处理函数  GETDATE()  返回当前的日期和时间 DATEPART()  返回日期/时间的单独部分 DATEADD()   返回日期中添加或减去指定的时间间隔 DATEDI ...

  7. 年度巨献-WPF项目开发过程中WPF小知识点汇总(原创+摘抄)

    WPF中Style的使用 Styel在英文中解释为”样式“,在Web开发中,css为层叠样式表,自从.net3.0推出WPF以来,WPF也有样式一说,通过设置样式,使其WPF控件外观更加美化同时减少了 ...

  8. 【Oracle】Oracle中常用的系统函数

    Oracle SQL 提供了用于执行特定操作的专用函数.这些函数大大增强了 SQL 语言的功能.函数可以接受零个或者多个输入参数,并返回一个输出结果.在Oracle还可以自定义函数,关于更多信息可以查 ...

  9. python中常用内置函数和关键词

    Python 常用内置函数如下: Python 解释器内置了很多函数和类型,您可以在任何时候使用它们.以下按字母表顺序列出它们. 1. abs()函数 返回数字的绝对值. print( abs(-45 ...

随机推荐

  1. FastDFS部署安装全过程

    你好!欢迎阅读我的博文,你可以跳转到我的个人博客网站,会有更好的排版效果和功能. 此外,本篇博文为本人Pushy原创,如需转载请注明出处:https://pushy.site/posts/153205 ...

  2. sql 中的分隔符

    1.通过分隔符可以将其中的内容作为一个整体的字符串进行处理. 假设数据库中有一个表,名为user info,注意这个名字,user 和 info 中间存在一个空格. 如果直接写如下查询,会报错,可能会 ...

  3. 深入理解net core中的依赖注入、Singleton、Scoped、Transient(二)

    相关文章: 深入理解net core中的依赖注入.Singleton.Scoped.Transient(一) 深入理解net core中的依赖注入.Singleton.Scoped.Transient ...

  4. 安装nvm之后node不可用,“node”不是内部或外部命令,也不是可运行的程序或批处理文件(ng)

    安装nvm: 1.下载nvm压缩包地址:https://github.com/coreybutler/nvm-windows/releases 2.下载后解压在目标文件夹中,我这里是H:\applic ...

  5. CCSUOJ评测系统——第四次scrum冲刺

    1.小组成员 舒 溢 许嘉荣 唐 浩 黄欣欣 廖帅元 刘洋江 薛思汝 2.最终成果及其代码仓库链接 CCSU评测系统 代码仓库 3.评测系统功能 用户注册 用户可选题目进行提交 用户做题结果 排名功能 ...

  6. JavaScript Web 应用最佳实践分析

    [编者按]本文作者为 Mathias Schäfer,旨在回顾在客户端大量使用JavaScript 的最佳 Web应用实践.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 对笔者来说,Jav ...

  7. MySQL Group Replication配置

    MySQL Group Replication简述 MySQL 组复制实现了基于复制协议的多主更新(单主模式). 复制组由多个 server成员构成,并且组中的每个 server 成员可以独立地执行事 ...

  8. 使用eclipse遇到的unable to install breakpoint的问题

    调试一个tomcat工程,设置好断点,启动工程,结果出现了下面的错误: 继续运行,再进入断点之前,还会再度提示,但是最终会命中断点. 使用CGLIB查找关键字,了解到CGLIB是一个AOP的拦截库,想 ...

  9. 从零开始学习Docker

    由于项目中可能用到docker容器,在此记录一下我的学习过程 1,docker的安装,wget -qO- https://get.docker.com/ | sh,查看docker是否安装成功: 此处 ...

  10. Docker 报错 error during connect: Get pipe/docker_engine: The system cannot find the file specified. - 摘要: 本文讲的是Docker 报错 error during connect: Get pipe/dock

    error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.37/version: open //./pipe/docker_ ...