사람의 차이점에 대한 간단한 영어로 설명 할 수 printf
, fprintf
및 sprintf
예제와 함께?
어떤 스트림에 있습니까?
“C의 파일 처리”에 대해 읽는 동안이 세 가지가 혼동됩니다.
답변
C에서 “스트림”은 추상화입니다. 프로그램의 관점에서 보면 단순히 바이트의 생산자 (입력 스트림) 또는 소비자 (출력 스트림)입니다. 디스크의 파일, 파이프, 터미널 또는 프린터 나 tty와 같은 다른 장치에 해당 할 수 있습니다. FILE
유형은 스트림에 대한 정보가 포함되어 있습니다. 일반적으로 FILE
객체의 내용을 직접 엉망으로 만들지 않고 다양한 I / O 루틴에 포인터를 전달하면됩니다.
표준 스트림에는 세 가지 표준 스트림이 있습니다. stdin
표준 입력 스트림에 stdout
대한 포인터, 표준 출력 스트림에 stderr
대한 포인터, 표준 오류 출력 스트림에 대한 포인터입니다. 대화식 세션에서 세 개는 일반적으로 콘솔을 참조하지만 다른 파일이나 장치를 가리 키도록 리디렉션 할 수는 있습니다.
$ myprog < inputfile.dat > output.txt 2> errors.txt
이 예에서 stdin
이제 가리키는 inputfile.dat
, stdout
포인트 output.txt
및 stderr
포인트 errors.txt
.
fprintf
서식이 지정된 텍스트를 지정한 출력 스트림에 씁니다.
printf
fprintf(stdout, ...)
표준 출력 스트림이 현재 가리키는 곳이면 어디서나 서식이 지정된 텍스트 를 쓰고 쓰는 것과 같습니다 .
sprintf
char
스트림이 아닌 형식화 된 텍스트를의 배열에 씁니다 .
답변
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
, vfprintf
및vprintf
답변
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
- printf는 화면에서 출력을 수행하는 데 사용됩니다.
- 구문 =
printf("control string ", argument );
- 파일 입출력과 관련이 없습니다.
fprintf
- FILE 핸들이 가리키는 파일에서 쓰기 조작을 수행하는 데 사용 된 fprintf
- 문법은
fprintf (filename, "control string ", argument );
- 파일 입출력과 관련
답변
fprintf
이것은 스트림과 관련이 있지만 스트림과는 관련 printf
이없는 명령문 fprintf
, 즉 fprintf
파일 관련 스트림 과 관련됩니다.