加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 什么可能导致流进入“坏”状态?

发布时间:2020-12-16 03:17:20 所属栏目:百科 来源:网络整理
导读:在C中,每个流都有一个坏的位: This flag is set by operations performed on the stream when an error occurs while read or writing data,generally causing the loss of integrity of the stream. Source 什么会导致流“失去诚信”并进入坏状态?这与失
在C中,每个流都有一个坏的位:

This flag is set by operations performed on the stream when an error occurs while read or writing data,generally causing the loss of integrity of the stream.

Source

什么会导致流“失去诚信”并进入坏状态?这与失败状态不同,这通常在输入流尝试将值存储到不能接受所述值的变量(如尝试将字符串存储到整数变量中)时发生.

请注意,这个问题是c++ file bad bit的一个更通用的形式,它特定于文件输入流;这个问题不是一个完全重复的,因为它一般适用于输入和输出流.

解决方法

根据 cppreference.com:

The standard library sets badbit in the following situations:

  • Insertion into the output stream by put() or write() fails for any
    reason.

  • Insertion into the output stream by operator<<,std::put_money or
    std::put_time,could not complete because the end of the output
    stream was reached (The facet’s formatting output function such as
    num_put::put() or money_put::put(),returns an iterator iter such
    that iter.failed()==true)

  • Stream is constructed with a null pointer for rdbuf(),or
    putback()/unget() is called on a stream with a null rdbuf(),or a
    null pointer passed to operator<<(basic_streambuf*)

  • rdbuf()->sputbackc() or rdbuf()->sungetc() return traits::eof() to
    putback() orunget()`

  • rdbuf()->pubsync() returns -1 to sync(),to flush(),or to the
    destructor of ostream::sentry on a unitbuf stream

  • Exception is thrown during an I/O operation by any member function of
    the associated stream buffer (e.g. sbumpc(),xsputn(),sgetc(),
    overflow(),etc)

  • Exception is thrown in iword() or pword() (e.g. std::bad_alloc)

这可能是在www.cpluplus.com上选择cppreference.com的另一个原因,请参阅:
What’s wrong with cplusplus.com?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读