白Piao才香 2018-12-22 13:41 采纳率: 33.3%
浏览 399

putc函数源代码。。。

想知道这个函数具体怎么实现的看了一下源码
int putc (int c, FILE * __F)
{
return (--
F->cnt >= 0)
? (int) (unsigned char) (*
_F->ptr++ = (char)_c)
: flsbuf (_c, __F);
}

除了看懂条件运算符?外,其他的都没遇见过,能解释一下吗?

  • 写回答

1条回答 默认 最新

  • C++的boost 2021-01-15 20:20
    关注

    在吗

    解释:真正在做putc的事情的是*_F->ptr++ = (char)_c。

    F是FILE*类型的,所以*F->ptr就是F的ptr属性。为了很好的解释这一点,现将FILE类型解释一下:

    struct _iobuf {
        char *ptr;  //下一个字符地址
        int cnt;    //剩余内存地址
        char *base; //起始的内存地址
        int flag;   //描述状态(读写)
        int fd;     //描述符
      };

    我们真正需要的是前三个。如果你输出了3个字符是“123”,‘1’的内存地址就是base,‘3’的地址的下一个地址就是ptr。如果你的输出流最多可以输出5个字符,而你输出了3个字符,cnt的值就是5-3=2.

    flsbuf (_c, __F)做的是什么呢?

    很简单,在流的内存不够时"冲刷”缓存,也就是复位缓存。

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)