snprintf 출력이 크기 0에서 NULL이 되는 것이 안전합니까?

snprintf 출력이 크기 0에서 NULL이 되는 것이 안전합니까?

전화를 걸어도 안전한가요 snprintf(NULL, 0, "…", …)? 제가 물어볼 수 있는 다른 방법이 있습니까? snprintf크기가 0이면 NUL 문자가 기록됩니까?

의 예리눅스 매뉴얼 페이지매뉴얼 페이지 printf(3)는 이를 수행하는 예를 제공하지만 나머지 텍스트나POSIX 프로그래머 매뉴얼, 관련 정보를 찾을 수 없습니다.

답변1

POSIX 프로그래머 매뉴얼구체적으로 정의됨:

snprintf() 함수는 sprintf()와 동일해야 하지만 s가 참조하는 버퍼의 크기를 나타내는 n 매개변수가 추가됩니다. n이 0이면 아무 것도 기록되지 않으며 s는 널 포인터가 될 수 있습니다.그렇지 않으면 n-1번째 이후의 출력 바이트는 배열에 기록되는 대신 삭제되고 실제로 배열에 기록된 바이트의 끝에 null 바이트가 기록됩니다.

(강조는 내 것)

이 호출을 하는 것은 완전히 안전해야 합니다.

관련 정보