C/C++程序中需要执行输入/输出时,我们一般会用到stdio或iostream。stdio指C语言的scanf/printf系列格式化输入输出函数,iostream指C++语言的cin/cout输入输出对象等。
但是,在真实的项目中很少用到iostream(muduo网络库也不例外),本篇就对二者的优、缺点进行一个小结(主要考虑x86 Linux平台,不考虑跨平台的可移植性,但是要考虑32-bit和64-bit的兼容性)。
stdio
(一)缺点:对编程初学者不友好
我们在C语言入门时、在输出第一行“Hello World”代码时,用到了标准输入输出stdio,而在学习C++语言的过程中,我们又接触到了iostream库的输入输出机制。相对于iostream给初学者提供了一个方便的命令行输入输出实验环境,stdio对于初学者来说则繁琐很多,看下面这个示例:
#include <stdio.h>
int main()
{
int i;
short s;
float f;
double d;
char name[80];
scanf("%d %hd %f %lf %s", &i, &s, &f, &d, name);
printf("%d %d %f %f %s\n", i, s, f, d, name);
return 0;
}
可以看到:
1.输入和输出用的格式字符串不一样。输入short要用%hd,输出用%d;输入double要用%lf,输出用%f。
2.输入的参数不统一。对于i,s,f,d等变量,在传入scanf()的时候要取地址(&);而对于字符数组name,则不用取地址。
3.程序有缓冲区溢出的危险。上面的例子在读入name的时候没有指定大小,这是用C语言编程的安全漏洞的主要来源。
向刚开始学编程的初学者清楚解释这几条背后的原因可谓是相当困难(涉及传递函数不定参数时的类型转换、函数调用栈的内存布局、指针的意义、字符数组退化为字符指针等等)。
iostream则对初学者很友好,用iostream重写与前面同样功能的代码,如下:
#include <iostream>