>백엔드 개발 >C++ >가변 개수의 인수를 printf/sprintf에 어떻게 전달할 수 있나요?

가변 개수의 인수를 printf/sprintf에 어떻게 전달할 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-11-27 16:26:111010검색

How Can I Pass a Variable Number of Arguments to printf/sprintf?

printf/sprintf에 변수 인수 전달

프로그래밍에서는 가변 길이 텍스트나 데이터의 형식을 지정하고 표시해야 하는 경우가 종종 있습니다. printf 및 sprintf와 같은 함수에 의해 일반적으로 처리되는 작업입니다. 그러나 이러한 함수에는 일반적으로 고정된 개수의 인수가 필요합니다. 이러한 함수에 가변 개수의 인수를 어떻게 전달할 수 있습니까?

해결책: va_* 함수 사용

C 언어는 접두사가 "va_"인 함수 집합을 제공합니다. "를 사용하면 가변 길이 인수 목록을 사용할 수 있습니다. 이러한 함수에는 va_start, va_arg 및 va_end가 포함됩니다.

printf 또는 sprintf에 가변 개수의 인수를 전달하려면 다음 단계를 사용할 수 있습니다.

  1. 저장할 va_list 변수를 선언합니다. 인수 목록.
  2. va_list 변수와 마지막으로 알려진 va_start를 호출합니다. 인수.
  3. va_arg를 사용하여 va_list에서 각 인수를 검색합니다.
  4. 검색된 인수를 printf 또는 sprintf 함수에 전달합니다.
  5. 다음과 같은 경우 va_end를 호출하여 정리합니다. 완료되었습니다.

예:

#include <stdio.h>
#include <stdarg.h>

class MyClass {
public:
    void Error(const char* format, ...) {
        va_list argptr;
        va_start(argptr, format);
        vfprintf(stderr, format, argptr);
        va_end(argptr);
    }
};

이 예에서 Error 메서드는 형식 문자열과 가변 개수의 인수를 사용합니다. va_arg를 사용하여 인수를 검색한 다음 vfprintf를 호출하여 텍스트 형식을 지정하고 stderr로 출력합니다.

참고:

vfprintf 대신 vsprintf를 사용할 수 있지만, 버퍼 오버플로에 취약하므로 권장되지 않습니다.

위 내용은 가변 개수의 인수를 printf/sprintf에 어떻게 전달할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.