當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


C++ snprintf()用法及代碼示例

C++ 中的snprintf() 函數用於將格式化字符串寫入字符串緩衝區。

sprintf() 不同,可以寫入緩衝區的最大字符數在 snprintf() 中指定。

snprintf()原型

int snprintf( char* buffer, size_t buf_size, const char* format, ... );

snprintf() 函數將 format 指向的字符串寫入 buffer 。可寫入的最大字符數為 (buf_size-1)

寫入字符後,添加終止空字符。如果buf_size 等於零,則不寫入任何內容並且緩衝區可能是空指針。

它在<cstdio> 頭文件中定義。

參數:

  • buffer:指向要寫入結果的字符串緩衝區的指針。
  • buf_size :指定要寫入緩衝區的最大字符數,即 buf_size-1
  • format:指向寫入文件流的空終止字符串的指針。它由字符以及以 % 開頭的可選格式說明符組成。

    格式說明符被格式字符串後麵的各個變量的值替換。

    格式說明符包含以下部分:

    • 前導 % 符號
    • Flags: 可選的一個或多個標誌,用於修改轉換行為。
      • -:左對齊字段內的結果。默認情況下它是右對齊的。
      • +:結果的符號附加到值的開頭,即使是正麵結果也是如此。
      • 空格:如果沒有符號,則在結果的開頭附加一個空格。
      • #:執行另一種形式的轉換。
      • 0:用於整數和浮點數。前導零用於填充數字而不是空格。
    • Width:可選的 * 或整數值,用於指定最小寬度字段。
    • Precision :一個可選字段,由 .後跟 * 或整數或不指定精度。
    • Length :一個可選的長度修飾符,用於指定參數的大小。
    • Specifier: 轉換格式說明符。可用的格式說明符如下:
      格式說明符 說明
      % 印刷 %
      c 寫入單個字符
      s 寫入一個字符串
      d 或 i 將有符號整數轉換為十進製表示
      o 將無符號整數轉換為八進製表示
      X 或 x 將無符號整數轉換為十六進製表示
      u 將無符號整數轉換為十進製表示
      F 或 f 將浮點數轉換為十進製表示
      E 或 e 將浮點數轉換為十進製 index 表示法
      一個或一個 將浮點數轉換為十六進製 index
      克或克 將浮點數轉換為十進製或十進製 index 表示法
      n 返回到目前為止此函數調用寫入的字符數。結果寫入參數指向的值
      p 編寫定義指針的實現定義的字符序列。

      所以格式說明符的一般格式是:%[flags][width][.precision][length]specifier

  • …:指定要打印的數據的其他附加參數。它們根據格式說明符按順序出現。

返回:

如果成功,snprintf() 函數將返回為足夠大的緩衝區寫入的字符數,不包括終止空字符。失敗時返回負值。

當且僅當返回值為非負且小於 buf_size 時,才認為輸出已完全寫入。

示例:snprintf() 函數的工作原理

#include <cstdio>
#include <iostream>

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;
}

運行程序時,輸出將是:

Hi, I am Max and I am 23 years old
Number of characters written = 34

相關用法


注:本文由純淨天空篩選整理自 C++ snprintf()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。