Namespaces
Variants

std::strstream:: strstream

From cppreference.net
strstream ( ) ;
(1) (C++98에서 사용 중단됨)
(C++26에서 제거됨)
(2) (C++98에서 사용 중단됨)
(C++26에서 제거됨)

새로운 입력/출력 strstream과 그 기반이 되는 std::strstreambuf 를 생성합니다.

1) 기본 생성자로 내부 std::strstreambuf 를 생성하며, 이는 동적으로 증가하는 버퍼를 만들고, strstreambuf 멤버의 주소로 기본 클래스를 초기화합니다.
2) 기본 클래스를 기본 std::strstreambuf 멤버의 주소로 초기화했습니다. 이 멤버는 사용자가 제공한 고정 크기 배열을 사용하는 두 가지 가능한 방식 중 하나로 초기화됩니다:
a) 만약 ( mode & app ) == 0 ( app 비트가 mode 에 설정되지 않은 경우), strstreambuf ( s, n, s ) 를 호출하여 버퍼를 구성합니다. s 가 가리키는 첫 번째 요소를 가진 배열에 n 개 미만의 요소가 있는 경우 동작은 정의되지 않습니다.
b) 만약 ( mode & app ) ! = 0 ( mode 에서 app 비트가 설정된 경우), strstreambuf ( s, n, s + std:: strlen ( s ) ) 를 호출하여 버퍼를 구성합니다. s 가 가리키는 첫 번째 요소를 갖는 배열에 n 개 미만의 요소가 있거나 배열이 유효한 null-terminated 문자 시퀀스를 포함하지 않는 경우 동작은 정의되지 않습니다.

목차

매개변수

s - char 출력 버퍼로 사용할 배열
n - 출력에 사용할 배열의 크기
mode - 스트림 열기 모드를 지정합니다. 비트마스크 타입이며, 다음 상수들이 정의되어 있습니다 ( app 만 사용됨):
상수 설명
app 각 쓰기 전에 스트림의 끝으로 이동
binary 바이너리 모드 로 열기
in 읽기용으로 열기
out 쓰기용으로 열기
trunc 열 때 스트림 내용 삭제
ate 열자마자 스트림의 끝으로 이동
noreplace (C++23) 배타 모드로 열기

예제

#include <iostream>
#include <string>
#include <strstream>
int main()
{
    // 동적 버퍼
    std::strstream s1;
    s1 << 1 << ' ' << 3.14 << " example" << std::ends;
    std::cout << "Buffer holds: '" << s1.str() << "'\n";
    s1.freeze(false);
    int n;
    double d;
    std::string w;
    s1 >> n >> d >> w;
    std::cout << "Read back: n = " << n
              << ", d = " << d
              << ", w = '" << w << "'\n";
    // 정적 버퍼
    char arr[20] = "-1 -3.14 ";
    std::strstream s2(arr, sizeof arr, std::ios_base::app);
    s2 << "another" << std::ends;
    std::cout << "Buffer holds: '" << s2.str() << "'\n";
    s2 >> n >> d >> w;
    std::cout << "Read back: n = " << n
              << ", d = " << d
              << ", w = '" << w << "'\n";
}

출력:

Buffer holds: '1 3.14 example'
Read back: n = 1, d = 3.14, w = 'example'
Buffer holds: '-1 -3.14 another'
Read back: n = -1, d = -3.14, w = 'another'

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 115 C++98 오버로드 (2)는 다음 경우만 고려함
mode & app == 0 ( == 의 우선순위가 & 보다 높음)
다음 경우들을 고려함 ( mode & app ) == 0
( mode & app ) ! = 0

참고 항목

strstreambuf 객체를 생성합니다
( std::strstreambuf 의 public 멤버 함수)
istrstream 객체를 생성합니다 (선택적으로 버퍼를 할당합니다)
( std::istrstream 의 public 멤버 함수)
ostrstream 객체를 생성합니다 (선택적으로 버퍼를 할당합니다)
( std::ostrstream 의 public 멤버 함수)