C ++ snprintf () - C ++ стандартна библиотека

Функцията snprintf () в C ++ се използва за записване на форматиран низ в буфер на символен низ.

За разлика от sprintf (), максималният брой символи, които могат да бъдат записани в буфера, е посочен в snprintf().

snprintf () прототип

 int snprintf (char * буфер, size_t buf_size, const char * формат, …);

Най snprintf()функцията пише низ, посочи от формат да се буферира. Максималният брой знаци, които могат да бъдат записани, е (buf_size-1).

След като символите са написани, се добавя завършващ нулев знак. Ако buf_size е равно на нула, нищо не се записва и буферът може да е нулев указател.

Той се определя в заглавния файл.

snprintf () Параметри

  • буфер: указател към буфера на низа, за да напише резултата.
  • buf_size: Посочете максимален брой символи, които да бъдат записани в буфера, който е buf_size-1.
  • формат: Указател на нулев прекратен низ, който се записва във файловия поток. Състои се от символи, заедно с опционални спецификатори на формат, започващи с%.

    Спецификаторите на формата се заменят със стойностите на съответните променливи, които следват низа на формата.

    Спецификаторът на формата има следните части:

    • Водещ знак%
    • Флагове: По избор един или повече флагове, които променят поведението на преобразуването.
      • -: Ляво обосноваване на резултата в полето. По подразбиране е правилно обосновано.
      • +: Знакът на резултата е прикрепен към началото на стойността, дори и за положителни резултати.
      • Интервал: Ако няма знак, интервал е прикрепен към началото на резултата.
      • #: Извършва се алтернативна форма на преобразуване.
      • 0: Използва се за цяло число и число с плаваща запетая. Водещите нули се използват за подреждане на числата вместо интервал.
    • Ширина: Незадължителна * или цяла стойност, използвана за задаване на поле за минимална ширина.
    • Прецизност: Незадължително поле, състоящо се от a. последвано от * или цяло число или нищо, за да се определи точността.
    • Дължина: Незадължителен модификатор на дължина, който указва размера на аргумента.
    • Спецификатор: Спецификатор на формат за преобразуване. Наличните спецификатори на формата са както следва:
      Форматизатор Описание
      % % Разпечатки
      ° С Пише един знак
      с Пише низ от символи
      d или i Преобразува подписано цяло число в десетично представяне
      o Преобразува неподписано цяло число в осмично представяне
      X или x Преобразува неподписано цяло число в шестнадесетично представяне
      u Преобразува неподписано цяло число в десетично представяне
      F или f Преобразува число с плаваща запетая в десетично представяне
      E или e Преобразува число с плаваща запетая в десетична степенна нотация
      A или a Преобразува число с плаваща запетая в шестнадесетичен експонент
      G или g Преобразува число с плаваща запетая в десетична или десетична степенна нотация
      н Връща броя на символите, написани до момента от това извикване на функцията. Резултатът се записва на стойността, посочена от аргумента
      стр Написва дефинирана последователност от символи, дефинираща указател.

      Така че общият формат на спецификатора на формата е: %(flags)(width)(.precision)(length)specifier

  • …: Други допълнителни аргументи, указващи данните, които ще бъдат отпечатани. Те се появяват в последователност според спецификатора на формата.

snprintf () Върната стойност

Ако е успешна, snprintf()функцията връща броя символи, които биха били записани за достатъчно голям буфер, с изключение на завършващия нулев знак. При отказ връща отрицателна стойност.

Изходът се счита за написан изцяло, ако и само ако върнатата стойност е неотрицателна и по-малка от buf_size.

Пример: Как работи функцията snprintf ()

 #include #include using namespace std; int main() ( char buffer(100); int retVal, buf_size = 100; char name() = "Max"; int age = 23; retVal = snprintf(buffer, buf_size, "Hi, I am %s and I am %d years old", name, age); if (retVal> 0 && retVal < buf_size) ( cout << buffer << endl; cout << "Number of characters written = " << retVal << endl; ) else cout << "Error writing to buffer" << endl; return 0; )

Когато стартирате програмата, изходът ще бъде:

 Здравейте, аз съм Макс и съм на 23 години Брой написани знаци = 34

Интересни статии...