C语言中的输入输出是怎样的及怎么使用怎么扩展

来源:互联网 发布:三哥家 淘宝 编辑:程序博客网 时间:2024/05/09 12:51

博主博客:codertown.cn

一、概念
这个主题是我们软件,或者说计算机软件中,很重要的一环。

通常,人类的沟通过程是这样:我说一句话(输入),你听到这句话(计算机接受),然后你脑袋反应(计算过程),最后你回应我一句话(输出给我信息)。

在上述过程中我把计算机的过程写到了括号里面。

还有一种看法就是,你可以把数据看成流的形式;如,我输出数据流到你,然后你经过处理之后又将结果数据流输送给我,总之,在编程中,我们经常就是对数据流进行处理,计算。

二、使用

C语言标准库里面,最简单的输入输出函数是:scanf、printf;

其他相关函数我会单独弄一个表,列出来,不过网上也有很多下载的,搜索“嵌入式linux库函数详解说明”,可以看到很多。

函数printf的原型如下

int printf(char *format, arg1, arg2, …);

其实从学编程的第一天起,就知道会用这个函数;
比如要打印一个整数:
printf(“t=%d\n”,10);

就这么简单的使用。但是你知道背后的为什么吗?

比如随便问几个问题:
1、前面的字符串是什么?

2、后面的arg1,arg2怎么用?

3、三个点是代表什么意思?

当然,在一般的C语言教材上,都是先给你说怎么格式转换,然后举几个例子,然后就直接用。是的,这实用教材不会告诉你每一个细节,不会告诉你那是什么,只会告诉你怎么用,但最终还是不明白。

这里,就是要讲明白则是什么意思。

首先,我们应该明白:
1、字符串其实代表的就是存放该字符串的首地址;
2、函数的参数都是存放在函数的栈空间上的,按从右到左的顺序入栈(函数那一篇博文讲过);
3、还有可变参数列表,va_args

三、内部实现
我们甚至可以自己实现一个printf打印;
两种方法:
1、使用va_args,头文件为stdarg.h,还有vsprintf;
说到这里,其实只是说,我们可以在任意地方添加我们想打印的参数,或者控制可变参数列表;
比如,我们在写一个调试打印函数的时候可以这么写:
int debug_printf(int level, char *format, arg1, arg2, …);

我表达的意思应该清楚了哈。

2、想要真正弄清楚printf的内部实现;

通过第二节中,我们可以看到,可变参数是一个一个从右往左入栈的,所以当我们取参数的时候则是从左往右还是取;

那么,我们通过解析format字符串,读到%则可以取一个参数。

思路就是这样,可以选择自己实现。

其他函数可以在读写文件之后再说。

0 0