c语言基础库函数大全,C语言库函数,C语言 超详细讲解库函数

c语言基础库函数大全,C语言库函数,C语言 超详细讲解库函数

c库函数就是把用户自定义的函数放在库中,别人编译一些常用的函数放在一个文件里,供程序员使用。下面详细了解一下。

目录

1返回整数的getchar函数2更新序列文件3缓冲区输出和内存分配4库函数练习

1 返回整数的getchar函数

代码:

# includestdio.h

int main()

{

char c;

while((c=getchar())!=EOF)//返回值=EOF)//getchar函数是整数。

putchar(c);

返回0;

}

上述代码有三种可能性:

一些合法的输入字符被“截断”使得C的值与e of相同,程序会在复制的中途停止。

c根本得不到EOF值,陷入死循环。

表面上看程序工作正常,其实完全是因为巧合。虽然函数geutchar的返回结果在赋给char类型的变量C时会被截断,但是在很多编译器中,他们不是将C与e of进行比较,而是将getchar函数的返回值与EOF进行比较!如果编译器采用这种方法,上面的例子可以正常运行。

2 更新顺序文件

当使用R同时读写文件时,需要使用fseek来移动指针,因为在读写的同时,文件指针所指向的位置是变化的。

3 缓冲输出与内存分配

程序输出有两种方式:一种是立即处理;另一种是先暂存,然后大块写入。

setbuf(stdout,buf);

语句将通知输入/输出库。所有写入stdout的输出都要使用buf作为输出缓冲区,buf缓冲区的内容直到buf缓冲区被填满或者程序员直接调用fflush才会被实际写入stdout(对于一个写打开的文件,调用fflush会导致输出缓冲区的内容被实际写入文件)。缓冲区的大小由系统头文件stdio.h中的BUFSIZ定义

下面是一个例子:

# includestdio.h

int main()

{

int c;

char buf[BUFSIZ];

setbuf(stdout,buf);

while((c=getchar())!=EOF)

putchar(c);

}

上面的程序是错误的,因为buf缓冲区最后一次清空是在main()函数结束之后,控制权移交给操作系统之前,C运行时库要进行清理。不过在此之前,buf字符数组已经发布。

两种解决方案:

静态char buf[BUFSIZ];

setbuf(stdout,(char *)malloc(BUFSIZ));

//这里不需要检查malloc函数调用是否成功,因为setbuf函数的第二个参数可以为NULL,此时不需要缓冲标准输出。

4 库函数

c语言实现包括信号库函数,作为捕获异步时间的一种方式。

#includesignal.h//要引用的头文件

信号(信号类型、处理函数);

这里,信号类型表示在系统头文件signal.h中定义的一些常量,这些常量用于标识信号函数要捕获的信号类型。这里的Handler function是指定事件发生时将被调用的事件处理函数。

注意:信号甚至可能出现在一些复杂库函数的执行过程中(比如malloc)。因此,从安全角度考虑,信号处理函数不应该调用上述库函数。

例如,假设malloc函数的执行被一个信号中断。此时,malloc用来跟上可用内存的数据结构很可能只进行了部分更新。如果信号处理函数再次调用malloc函数,结果可能是malloc函数使用的数据结构完全崩溃,后果不堪设想。

结论:信号非常复杂和棘手,它具有一些本质上不可携带的特征。所以我们应该让signal处理的功能尽可能的简单,把它们组织在一起,这样当我们需要适应一个新系统的时候,就可以很容易的修改它们。

练习

问:当程序异常终止时,程序输出的最后几行经常丢失。原因是什么?我们可以采取什么措施来解决这个问题?

答:异常终止的程序可能没有机会清空它的输出缓冲区。因此,这个程序生成的输出可能位于内存中的某个地方,但它永远不会被写出来。在某些系统上,无法写出的输出数据可能长达几页。

对于调试这类程序的程序员来说,这种输出的损失往往会误导他们,因为这会给人一种程序失败的时间比实际失败的时间早很多的印象。* *解决方案是在调试期间强制不缓冲输出。* *解决方案如下:

setbuf(stdout,(char *)0);

该语句必须在任何输出写入stdout之前执行(包括任何对printf函数的调用)。这个语句最合适的位置是作为主函数的第一个语句。

以下程序的功能是将其输入复制到其输出:

# includestdio.h

int main()

{

寄存器int c;

while((c=getchar())!=EOF)

putchar(c);

返回0;

}

把代码改成下面的代码,程序还是能正确运行,只是慢了很多。为什么?

#定义EOF -1

int main()

{

寄存器int c;

while((c=getchar())!=EOF)

putchar();

返回0;

}

函数调用需要很长时间来执行程序,所以getchar经常被实现为一个宏。这是在stdio.h中定义的,所以程序不包含stdio.h头文件。在所有fgetchar宏出现的地方,getchar宏被getchar函数调用替换。这个程序变慢的原因是函数调用导致的开销增加。同样的基础也适用于putchar。

这就是这篇关于C语言的文章,它非常详细地解释了库函数的用法。关于C语言库函数的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: