Namespaces
Variants

std:: fgets

From cppreference.net
< cpp ‎ | io ‎ | c
헤더 파일에 정의됨 <cstdio>
char * fgets ( char * str, int count, std:: FILE * stream ) ;

주어진 파일 스트림에서 최대 count - 1 개의 문자를 읽어 str 가 가리키는 문자 배열에 저장합니다. 파싱은 새 줄 문자를 찾은 경우(이 경우 str 에 해당 새 줄 문자가 포함됨) 또는 파일 끝에 도달한 경우 중단됩니다. 바이트가 읽히고 오류가 발생하지 않으면, str 에 기록된 마지막 문자 바로 다음 위치에 널 문자를 기록합니다.

목차

매개변수

str - char 배열의 요소를 가리키는 포인터
count - 최대 작성 문자 수 (일반적으로 str 의 길이)
stream - 데이터를 읽어올 파일 스트림

반환값

str 성공 시, 실패 시 널 포인터.

파일 끝 조건이 발생하면, eof 표시자를 stream 에 설정합니다 ( std::feof() 참조). 이는 읽은 바이트가 없을 때에만 실패로 간주되며, 이 경우 널 포인터가 반환되고 str 이 가리키는 배열의 내용은 변경되지 않습니다 (즉, 첫 번째 바이트가 널 문자로 덮어쓰여지지 않습니다).

만약 실패가 다른 오류로 인해 발생한 경우, stream error 지시자를 설정합니다( std::ferror() 참조). str 이 가리키는 배열의 내용은 불확정적입니다(널 종료되지 않았을 수도 있습니다).

참고 사항

POSIX는 추가적으로 요구합니다 , fgets 가 파일 끝 조건 이외의 오류를 만날 경우 errno 를 설정하도록 합니다.

표준 명세는 불명확하지만 , count <= 1 인 경우 일반적인 구현체들은

  • 만약 count < 1 이면, 아무 작업도 수행하지 않고 오류를 보고합니다,
  • 만약 count == 1 이면,
  • 일부 구현체는 아무 작업도 수행하지 않고 오류를 보고합니다,
  • 다른 구현체는 아무것도 읽지 않고 str [ 0 ] 에 0을 저장하고 성공을 보고합니다.

예제

#include <cstdio>
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <span>
void dump(std::span<const char> buf, std::size_t offset)
{
    std::cout << std::dec;
    for (char ch : buf)
        std::cout << (ch >= ' ' ? ch : '.'), offset--;
    std::cout << std::string(offset, ' ') << std::hex
              << std::setfill('0') << std::uppercase;
    for (unsigned ch : buf)
        std::cout << std::setw(2) << ch << ' ';
    std::cout << std::dec << '\n';
}
int main()
{
    std::FILE* tmpf = std::tmpfile();
    std::fputs("Alan Turing\n", tmpf);
    std::fputs("John von Neumann\n", tmpf);
    std::fputs("Alonzo Church\n", tmpf);
    std::rewind(tmpf);
    for (char buf[8]; std::fgets(buf, sizeof buf, tmpf) != nullptr;)
        dump(buf, 10);
}

출력:

Alan Tu.  41 6C 61 6E 20 54 75 00 
ring..u.  72 69 6E 67 0A 00 75 00 
John vo.  4A 6F 68 6E 20 76 6F 00 
n Neuma.  6E 20 4E 65 75 6D 61 00 
nn..uma.  6E 6E 0A 00 75 6D 61 00 
Alonzo .  41 6C 6F 6E 7A 6F 20 00 
Church..  43 68 75 72 63 68 0A 00

참고 항목

표준 입력, 파일 스트림 또는 버퍼로부터 형식화된 입력을 읽어들임
(함수)
(C++11에서 사용 중단됨) (C++14에서 제거됨)
표준 입력으로부터 문자 문자열을 읽어들임
(함수)
파일 스트림에 문자 문자열을 기록함
(함수)
C 문서 for fgets