可能重复:
你在C++代码中使用哪个I/O库?
我在另一个问题的评论中提出了这个问题,并被要求将其变成一个正式的问题。
为什么我想使用iostream而不是stdio?更具体地说,std::getline相对于C语言的等价物有什么优势?
请勿进行语言攻击。
可能重复:
你在C++代码中使用哪个I/O库?
我在另一个问题的评论中提出了这个问题,并被要求将其变成一个正式的问题。
为什么我想使用iostream而不是stdio?更具体地说,std::getline相对于C语言的等价物有什么优势?
请勿进行语言攻击。
有几个优点,主要是使用 <<
和 >>
运算符。获取一行并没有太大的区别,不过能够将其读入到一个 std::string
中是一个相当大的优势。
C++ I/O 具有类型安全性。你不需要将参数列表写成引用字符串,然后再写一遍变量等内容。你只需要编写一次要打印的内容,C++ 会自动确定参数的数量和类型。当出现类型不匹配时,C I/O 可能会输出错误的结果,甚至会访问受保护的内存。
C++ I/O 易于扩展。一旦你有样例可供参考,你可以轻松地编写 operator<<()
和 operator>>()
。而 printf()
等函数则无法扩展,你只有固定的格式类型列表可选。
尽管 C++ I/O 乍看起来相当简单,但它具有很多程序员可访问的结构,因此一位优秀的 C++ 程序员可以修改它以涵盖 C I/O 无法处理的情况。(不要滥用这种能力。)
最大的收益是类型安全。在C语言中,格式化字符串没有类型(与OCaml或boost::format等语言不同),因此您可能会意外地做出一些相当恶心的事情。
您可以获得抽象的输入/输出/可寻址流,可以以任何方式实现。
您可以向/从流中写入/读取数据,这些流可以是文件、内存、字符串甚至是自定义过滤器或zlib压缩器!
一些C库提供了设置读/写处理程序的选项(BSD和Linux),但仍不具备与std::streambuf相同的功能,也不是标准。
您可以使用特定于流的语言环境,以线程特定的方式将数据按任何语言环境格式化到流中。
还需要翻译更多内容吗?
std::getline()
。它将一行读入到一个std::string
,而不是fgets()
读入到字符数组中。使用字符数组还需要正确分配内存空间,跟踪其大小并进行释放。 - Dima如果你使用C++,你可能想要使用面向对象编程,对吧?我猜 cstdio(又名 stdio.h)只是为了与C兼容而存在。