c++ printf 예제

augusztus 2, 2019 6:03 du. Közzétette cccccccccccccc

세 개의 8자 열에서 세 정수에 대해 %8d%8d%8d와 같은 형식과 같이 필드 너비만 사용하여 표에 따라 많은 수가 발생하는 경우 필드 분리가 유지되지 않습니다. 필드 분리가 손실되어 출력이 손상될 수 있습니다. 스크립트의 구성 요소로 프로그램을 사용하도록 권장하는 시스템에서는 원래 프로그래머가 출력을 사람의 눈으로만 읽을 수 있는지 여부에 관계없이 이러한 손상된 데이터를 전달하여 추가 처리를 손상시킬 수 있습니다. 이러한 문제는 모든 테이블 형식 출력 형식에 명시적 구분 기호, 심지어 공백을 포함하여 제거할 수 있습니다. 이전예제를 %7d %7d %7d로 변경하기만 하면 숫자가 커질 때까지 동일한 서식을 지정하지만 명시적으로 포함된 공백으로 인해 출력에 병합되는 것을 명시적으로 방지할 수 있습니다. 문자열 데이터에도 유사한 전략이 적용됩니다. printf를 호출할 때 기본 개념은 일부 리터럴 문자와 대체할 요소가 있는 문자열을 제공하는 것입니다. 예를 들어: 이 문서의 스타일에서 벗어난 형식 문자열을 사용하는 언어(예: AMPL 및 Elixir), JVM 또는 기타 환경(예: Clojure 및 Scala)에서 구현을 상속하는 언어 및 그렇지 않은 언어 표준 네이티브 printf 구현을 가지고 있지만 Printf 동작 (예 : JavaScript)을 에뮬레이트하는 외부 라이브러리가이 목록에 포함되지 않습니다. 다음 문자 시퀀스는 printf 형식 지정자로 사용될 때 특별한 의미를 가합니다: 이스케이프 문자 기반 미니 언어로 확장을 허용하는 printf와 같은 함수의 몇 가지 구현이 있으므로 프로그래머가 비기본 형식에 대한 특정 서식 함수입니다. 가장 잘 알려진 것 중 하나는 (현재 사용되지 않는) glibc의 register_printf_function()입니다. 그러나 정적 형식 문자열 검사와 충돌하기 때문에 거의 사용되지 않습니다. 다른 하나는 다중 문자 형식 이름을 추가할 수 있는 Vstr 사용자 지정 포맷터입니다.

메모리 쓰기 변환 지정자 %n은 형식 문자열이 사용자 입력에 종속되고 경계가 확인된 printf_s 함수 패밀리에서 지원되지 않는 보안 익스플로잇의 일반적인 대상입니다. 제공된 숫자가 제공된 것보다 더 정밀도가 있으면 반올림됩니다. 예: 지정된 형식 지정자의 경우 항상 백분율 부호와 기본 지정기(base specifier)를 제공해야 합니다. 그런 다음 원하는 플래그, 너비 및 정밀도 및 길이 중 또는 전부를 포함할 수 있습니다. 여러 플래그토거를 포함할 수도 있습니다. 다음은 메모리 주소를 헥사데피만 값으로 인쇄하는 데 유용한 여러 플래그를 보여 주는 복잡한 예입니다. 기본적으로 C는 출력 서식을 지정하기 위한 많은 전력을 제공합니다. 표준 표시 기능인 printf는 프로그램의 포맷 방식에 대한 많은 정보를 지정할 수 있는 „형식 문자열”을 취합니다.

%기호 바로 바로 앞에 마이너스 기호를 배치하지 않는 한 printf()의 출력은 오른쪽 맞춤입니다. 예를 들어 wprintf를 사용하는 경우 % s를 사용하면 기본적으로 모든 문자열을 넓은 문자열로 처리합니다. 호출 std::snprintf 버퍼에 대 한 0 buf_size 및 null 포인터 출력을 포함 하는 데 필요한 버퍼 크기를 결정 하는 데 유용: 리눅스 커널 printk 함수는 일반 %p 사양을 사용 하 여 커널 구조를 표시 하는 여러 가지 방법을 지원 합니다. 추가 형식 문자를 추가하여 [7] 예를 들어 %pI4는 IPv4 주소를 점선 소수자 형태로 인쇄합니다.

Kategória: Egyéb kategória

Írta: Gabor