Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::basic_stringbuf<CharT,Traits,Allocator>::seekoff

      From cppreference.com
      <cpp‎ |io‎ |basic stringbuf
       
       
       
       
      protected:

      virtual pos_type seekoff( off_type off,
                               std::ios_base::seekdir dir,

                               std::ios_base::openmode which=std::ios_base::in|std::ios_base::out);

      Repositionsstd::basic_streambuf::gptr and/orstd::basic_streambuf::pptr, if possible, to the position that corresponds to exactlyoff characters from beginning, end, or current position of the get and/or put area of the buffer.

      Ifgptr and/orpptr is repositioned, it is done as follows:

      1) The new pointer offsetnewoff of typeoff_type is determined
      a) ifdir==std::ios_base::beg, thennewoff is zero
      b) ifdir==std::ios_base::cur, thennewoff is the current position of the pointer (gptr()- eback() orpptr()- pbase())
      c) ifdir==std::ios_base::end, thennewoff is the length of the entire initialized part of the buffer (ifover-allocation is used, the high watermark pointer minus the beginning pointer)
      2) If the pointer to be repositioned is a null pointer andnewoff would be non-zero, this function fails.
      3) Ifnewoff+ off<0 (the repositioning would move the pointer to before the beginning of the buffer) or ifnewoff+ off would point past the end of the buffer (or past the last initialized character in the buffer ifover-allocation is used), the function fails.
      4) Otherwise, the pointer is assigned as if bygptr()= eback()+ newoff+ off orpptr()= pbase()+ newoff+ off.

      Contents

      [edit]Parameters

      off - relative position to set the next pointer(s) to
      dir - defines base position to apply the relative offset to. It can be one of the following constants:
      Constant Explanation
      beg the beginning of a stream
      end the ending of a stream
      cur the current position of stream position indicator
      which - defines whether the input sequences, the output sequence, or both are affected. It can be one or a combination of the following constants:
      Constant Explanation
      in affect the input sequence
      out affect the output sequence

      [edit]Return value

      pos_type(newoff) on success,pos_type(off_type(-1)) on failure or ifpos_type cannot represent the resulting stream position.

      [edit]Example

      Run this code
      #include <iostream>#include <sstream> int main(){std::stringstream ss("123");// in/outstd::cout<<"put pos = "<< ss.tellp()<<" get pos = "<< ss.tellg()<<'\n'; // absolute positioning both pointers    ss.rdbuf()->pubseekoff(1,std::ios_base::beg);// move both 1 forwardstd::cout<<"put pos = "<< ss.tellp()<<" get pos = "<< ss.tellg()<<'\n'; // try to move both pointers 1 forward from current positionif(-1== ss.rdbuf()->pubseekoff(1,std::ios_base::cur))std::cout<<"moving both pointers from current position failed\n";std::cout<<"put pos = "<< ss.tellp()<<" get pos = "<< ss.tellg()<<'\n'; // move the write pointer 1 forward, but not the read pointer// can also be called as ss.seekp(1, std::ios_base::cur);    ss.rdbuf()->pubseekoff(1,std::ios_base::cur,std::ios_base::out);std::cout<<"put pos = "<< ss.tellp()<<" get pos = "<< ss.tellg()<<'\n';     ss<<'a';// write at put positionstd::cout<<"Wrote 'a' at put position, the buffer is now "<< ss.str()<<'\n'; char ch;    ss>> ch;std::cout<<"reading at get position gives '"<< ch<<"'\n";}

      Output:

      put pos = 0 get pos = 0put pos = 1 get pos = 1moving both pointers from current position failedput pos = 1 get pos = 1put pos = 2 get pos = 1Wrote 'a' at put position, the buffer is now 12areading at get position gives '2'

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 55C++98seekoff returned an undefined
      invalid stream position on failure
      pos_type(off_type(-1))
      is returned on failure
      LWG 375C++98static constant members ofstd::ios_base were
      misspecified as members ofstd::basic_ios
      corrected
      LWG 432C++98seekoff might succeed even ifnewoff+ off
      would point past the last initialized character
      seekoff fails
      in this case
      LWG 453C++98repositioning nullgptr() and/or nullpptr()
      with a new offset of zero always failed
      it can succeed in this case
      LWG 563C++98the end pointer could not be used to calculatenewoff because it could
      not be precisely controlled by the program after resolvingLWG issue 432
      use the high watermark
      pointer instead

      [edit]See also

      invokesseekoff()
      (public member function ofstd::basic_streambuf<CharT,Traits>)[edit]
      [virtual]
      repositions the next pointer in the input sequence, output sequence, or both using absolute addressing
      (virtual protected member function)[edit]
      [virtual]
      repositions the file position, using relative addressing
      (virtual protected member function ofstd::basic_filebuf<CharT,Traits>)[edit]
      [virtual]
      repositions the next pointer in the input sequence, output sequence, or both, using relative addressing
      (virtual protected member function ofstd::strstreambuf)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/io/basic_stringbuf/seekoff&oldid=148675"

      [8]ページ先頭

      ©2009-2025 Movatter.jp