C99 및 POSIX.1-2001은 스프린트프(), snprintf(), vsprintf(vsprintf)) 또는 vsnprintf()에 대한 호출이 겹치는 개체 간에 복사가 발생하도록 지정합니다(예: 대상 문자열 배열과 제공된 입력 인수 중 하나가 참조되는 경우) 동일한 버퍼에 있습니다). 참고 를 참조하십시오. snprintf를 보여 주는 좋은 방법은 „보수적인 버퍼”를 구현하는 것입니다. 버퍼에 적은 양의 메모리를 할당하고 문자열을 배치하려고 시도하고 필요한 경우 더 큰 버퍼를 만듭니다. 더 큰 버퍼를 만든 후에도 문자열이 여전히 맞지 않으면 프로그램을 종료합니다. 다음 예제에서는 버퍼를 취하고 모든 요소를 초기화하고 몇 가지 실험을 실행합니다. snprintf에 대한 호출의 크기 부분과 버퍼에 배치하려는 문자열의 크기를 모두 변경합니다. fprintf(), printf(), 스프린트프(), vprintf(), vfprintf(및 vsprintf() 함수는 C89 및 C99를 준수합니다. snprintf() 및 vsnprintf() 함수는 C99를 준수합니다. 함수 vprintf(), vfprintf(), vsprintf(), vsnprintf() 함수는 다양한 인수 수 대신 va_list로 호출된다는 점을 제외하면 각각 printf(), fprintf(), 스프린트프(), 스프린트프() 및 snprintf(snprintf()와 동일합니다. 이러한 함수는 va_end 매크로를 호출하지 않습니다. va_arg 매크로를 호출하기 때문에 호출 후 ap 값이 정의되지 않습니다.
stdarg(3)를 참조하십시오. 함수 snprintf() 및 vsnprintf() str에 대부분의 크기 바이트(null 바이트(„)를 종료포함)로 씁니다. 위의 모든 예제에 대해 이 수식을 확인하는 데 몇 분 정도 걸릴 수 있습니다:) 버퍼에 대한 0 bufsz 및 null 포인터가있는 snprintf를 호출하는 것은 출력을 포함하는 데 필요한 버퍼 크기를 결정하는 데 유용합니다 : snprintf() 함수는 헤더 파일에 정의되어 있습니다. vsnprintf – 서식을 지정한 출력 변환 snprintf(), SUSv2 및 C99의 반환 값과 관련하여 서로 모순됩니다: snprintf(snprintf)가 크기=0으로 호출될 때 SUSv2는 지정되지 않은 반환 값을 1 보다 적게 지정한 반면 C99은 이 경우 NULL이 될 수 있습니다. 출력 문자열이 충분히 큰 경우 작성된 문자 수로 반환 값을 항상 제공합니다. 함수 snprintf() 및 vsnprintf()는 크기 바이트(null 바이트(„)를 종료포함)보다 많은 바이트를 쓰지 않습니다. 이 제한으로 인해 출력이 잘린 경우 반환 값은 충분한 공간을 사용할 수 있는 경우 최종 문자열에 기록된 문자 수(null 바이트 종료 제외)입니다. 따라서 크기 이상의 반환 값은 출력이 잘린 것을 의미합니다. (아래 참고 사항 도 참조)) 을 사용하여 텍스트를 buf에 더하기 를 선택합니다. 그러나 표준은 sprintf(), snprintf(), vsprintf(및 vsnprintf()를 호출할 때 소스 및 대상 버퍼가 겹치는 경우 결과가 정의되지 않음을 명시적으로 나타냅니다. 사용되는 gcc(1) 버전과 사용된 컴파일러 옵션에 따라 위와 같은 호출은 예상된 결과를 생성하지 않습니다. 이 예제에서 버퍼는 크기 4 이상이어야 하며 크기 매개 변수는 4 이상이어야 합니다.