muduo网络库学习笔记(15):关于使用stdio和iostream的讨论

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>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值