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. webapp开发绝对定位引发的问题

    最近做了一个webapp 需求是要滑动页面翻页,我使用了大量绝对定位 当遇到输入框时,在部分手机上发现了问题.虚拟键盘收回时,整个body全部下移了,经过多次测试, 发现是fixed布局的音乐按钮造成 ...

  2. PRINCE2是什么?

    PRINCE是PRoject IN Controlled Environment(受控环境下的项目管理)的简称. PRINCE2描述了如何以一种逻辑性的.有组织的方法,按照明确的步骤对项目进行管理. ...

  3. C#判断奇偶数的函数

    // 现代流行的"程序员"public static bool IsOdd(int n) {     while (true)    {        switch (n)     ...

  4. machine learning model(algorithm model) .vs. statistical model

    https://www.analyticsvidhya.com/blog/2015/07/difference-machine-learning-statistical-modeling/ http: ...

  5. Linux系统管理员命令:sudo

    sudo是个统管一切的命令.它的字面意思是代表“超级用户才能做!”(super user do!)对Linux系统管理员或高级用户而言,它是必不可少的最重要的命令之一.你可曾有过这样的经历:在终端中试 ...

  6. 模板与STL学习简单的笔记

    一.如何进行泛型编程 C/C++是一种静态编程语言,必须需要把代码翻译成可执行的二进制可执行程序然后再运行,一旦编译好之后就不能再变了(数据类型也就必须确定下无法更改,因此要为每一种数据类型编写一份算 ...

  7. IP地址分类/IP地址10开头和172开头和192开头的区别/判断是否同一网段(A、B、C三类地址)【转】

    简单来说在公司或企业内部看到的就基本都是内网IP,ABC三类IP地址里的常见IP段. 每个IP地址都包含两部分,即网络号和主机号. InterNIC将IP地址分为五类:A类保留给ZF或大型企业,B类分 ...

  8. idea指定SpringBoot启动.properties文件

    比如我的项目下有2个.properties文件,一个是application.properties,一个是application-local.properties,在本地的时候想指定用applicat ...

  9. robotFramework--ride 问题:Data source does not exist.

    第一次安装robotFramework,运行时提示Data source does not exist.最后发现是在Arguments这一栏误输入了. 导致的,去掉.后就可以正常运行了.

  10. yii 验证码功能的实现

    首先知晓我们在使用验证码的时候通常是和我们的表单小部件配合使用首先我们创建model层 新建一个php文件 名字叫做Verifycode.php 要在我们的model层 创建我们的验证码的验证规则,我 ...