[c] fprintf, printf 및 sprintf의 차이점은 무엇입니까?

사람의 차이점에 대한 간단한 영어로 설명 할 수 printf, fprintfsprintf예제와 함께?

어떤 스트림에 있습니까?

“C의 파일 처리”에 대해 읽는 동안이 세 가지가 혼동됩니다.



답변

C에서 “스트림”은 추상화입니다. 프로그램의 관점에서 보면 단순히 바이트의 생산자 (입력 스트림) 또는 소비자 (출력 스트림)입니다. 디스크의 파일, 파이프, 터미널 또는 프린터 나 tty와 같은 다른 장치에 해당 할 수 있습니다. FILE유형은 스트림에 대한 정보가 포함되어 있습니다. 일반적으로 FILE객체의 내용을 직접 엉망으로 만들지 않고 다양한 I / O 루틴에 포인터를 전달하면됩니다.

표준 스트림에는 세 가지 표준 스트림이 있습니다. stdin표준 입력 스트림에 stdout대한 포인터, 표준 출력 스트림에 stderr대한 포인터, 표준 오류 출력 스트림에 대한 포인터입니다. 대화식 세션에서 세 개는 일반적으로 콘솔을 참조하지만 다른 파일이나 장치를 가리 키도록 리디렉션 할 수는 있습니다.

$ myprog < inputfile.dat > output.txt 2> errors.txt

이 예에서 stdin이제 가리키는 inputfile.dat, stdout포인트 output.txtstderr포인트 errors.txt.

fprintf 서식이 지정된 텍스트를 지정한 출력 스트림에 씁니다.

printffprintf(stdout, ...)표준 출력 스트림이 현재 가리키는 곳이면 어디서나 서식이 지정된 텍스트 를 쓰고 쓰는 것과 같습니다 .

sprintfchar스트림이 아닌 형식화 된 텍스트를의 배열에 씁니다 .


답변

printf표준 출력 스트림으로 출력 ( stdout)

fprintf파일 핸들로 이동합니다 ( FILE*)

sprintf할당 한 버퍼로 이동합니다. ( char*)


답변

printf ( “format”, args)는 종종 컴퓨터 모니터 인 표준 출력으로 데이터를 인쇄하는 데 사용됩니다.

sprintf (char *, “format”, args)는 printf와 같습니다. 표준 출력 즉 모니터에 형식화 된 문자열을 표시하는 대신 형식화 된 데이터를 char 포인터 (첫 번째 매개 변수)가 가리키는 문자열에 저장합니다. 문자열 위치는 printf와 sprint 구문의 유일한 차이점입니다.

fprintf (FILE * fp, “format”, args)는 다시 printf와 같습니다. 대신 모니터에 데이터를 표시하거나 일부 문자열로 저장하면 형식화 된 데이터는 파일에 저장되며 파일 포인터는 fprintf의 첫 번째 매개 변수로 사용됩니다. 파일 포인터는 printf 구문에 추가 된 유일한 것입니다.

경우 표준 출력의 파일이 fprintf와의 첫 번째 매개 변수로 사용되며, 그 작업은 다음 printf와 동등한 것으로 간주됩니다.


답변

printf(...)와 같습니다 fprintf(stdout,...).

fprintf 스트림으로 출력하는 데 사용됩니다.

sprintf(buffer,...) 문자열을 버퍼로 형식화하는 데 사용됩니다.

참고가도 vsprintf, vfprintfvprintf


답변

vsnprintf () 함수를 사용하여 매우 유용한 작업을 수행 할 수도 있습니다.

$ cat test.cc
#include <exception>
#include <stdarg.h>
#include <stdio.h>

struct exception_fmt : std::exception
{
    exception_fmt(char const* fmt, ...) __attribute__ ((format(printf,2,3)));
    char const* what() const throw() { return msg_; }
    char msg_[0x800];
};

exception_fmt::exception_fmt(char const* fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    vsnprintf(msg_, sizeof msg_, fmt, ap);
    va_end(ap);
}

int main(int ac, char** av)
{
    throw exception_fmt("%s: bad number of arguments %d", *av, ac);
}

$ g++ -Wall -o test test.cc

$ ./test
terminate called after throwing an instance of 'exception_fmt'
  what():  ./test: bad number of arguments 1
Aborted (core dumped)


답변

printf

  1. printf는 화면에서 출력을 수행하는 데 사용됩니다.
  2. 구문 = printf("control string ", argument );
  3. 파일 입출력과 관련이 없습니다.

fprintf

  1. FILE 핸들이 가리키는 파일에서 쓰기 조작을 수행하는 데 사용 된 fprintf
  2. 문법은 fprintf (filename, "control string ", argument );
  3. 파일 입출력과 관련

답변

fprintf이것은 스트림과 관련이 있지만 스트림과는 관련 printf이없는 명령문 fprintf, 즉 fprintf파일 관련 스트림 과 관련됩니다.