C ++ snprintf () - Thư viện chuẩn C ++

Hàm snprintf () trong C ++ được sử dụng để ghi một chuỗi được định dạng vào bộ đệm chuỗi ký tự.

Không giống như sprintf (), số ký tự tối đa có thể được ghi vào bộ đệm được chỉ định trong snprintf().

nguyên mẫu snprintf ()

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

Các snprintf()chức năng viết chuỗi trỏ đến bởi định dạng để đệm. Số ký tự tối đa có thể được viết là (buf_size-1).

Sau khi các ký tự được viết, một ký tự rỗng kết thúc sẽ được thêm vào. Nếu buf_size bằng 0, không có gì được ghi và bộ đệm có thể là một con trỏ null.

Nó được định nghĩa trong tệp tiêu đề.

Tham số snprintf ()

  • buffer: Con trỏ tới vùng đệm chuỗi để ghi kết quả.
  • buf_size: Chỉ định số ký tự tối đa được ghi vào bộ đệm là buf_size-1.
  • định dạng: Con trỏ đến một chuỗi kết thúc bằng rỗng được ghi vào dòng tệp. Nó bao gồm các ký tự cùng với các thông số định dạng tùy chọn bắt đầu bằng%.

    Các chỉ định định dạng được thay thế bằng các giá trị của các biến tương ứng theo sau chuỗi định dạng.

    Bộ định dạng có các phần sau:

    • Dấu% đứng đầu
    • Cờ: Tùy chọn một hoặc nhiều cờ sửa đổi hành vi chuyển đổi.
      • -: Căn trái cho kết quả trong trường. Theo mặc định, nó là đúng hợp lý.
      • +: Dấu kết quả được gắn vào đầu giá trị kể cả cho kết quả dương tính.
      • Dấu cách: Nếu không có dấu, dấu cách được gắn vào đầu kết quả.
      • #: Một hình thức chuyển đổi thay thế được thực hiện.
      • 0: Nó được sử dụng cho số nguyên và số dấu phẩy động. Các số không ở đầu được sử dụng để đệm các số thay vì khoảng trắng.
    • Chiều rộng: Một giá trị số nguyên hoặc * tùy chọn được sử dụng để chỉ định trường chiều rộng tối thiểu.
    • Độ chính xác: Một trường tùy chọn bao gồm a. theo sau là * hoặc số nguyên hoặc không có gì để chỉ định độ chính xác.
    • Chiều dài: Công cụ sửa đổi độ dài tùy chọn chỉ định kích thước của đối số.
    • Specifier: Một chỉ định định dạng chuyển đổi. Các thông số định dạng có sẵn như sau:
      Định dạng chỉ định Sự miêu tả
      % In%
      c Viết một ký tự
      S Viết một chuỗi ký tự
      d hoặc tôi Chuyển đổi một số nguyên có dấu thành biểu diễn thập phân
      o Chuyển đổi một số nguyên không dấu thành biểu diễn bát phân
      X hoặc x Chuyển đổi một số nguyên không dấu thành biểu diễn thập lục phân
      u Chuyển đổi một số nguyên không dấu thành biểu diễn thập phân
      F hoặc f Chuyển đổi số dấu phẩy động thành biểu diễn thập phân
      E hoặc e Chuyển đổi số dấu phẩy động thành ký hiệu số mũ thập phân
      A hoặc a Chuyển đổi số dấu phẩy động thành số mũ thập lục phân
      G hoặc g Chuyển đổi số dấu phẩy động thành ký hiệu số mũ thập phân hoặc thập phân
      n Trả về số ký tự được viết cho đến nay bởi lệnh gọi này cho hàm. Kết quả được ghi vào giá trị được trỏ tới bởi đối số
      p Viết một chuỗi ký tự được xác định triển khai xác định một con trỏ.

      Vì vậy, định dạng chung của trình định dạng là: %(flags)(width)(.precision)(length)specifier

  • …: Các đối số bổ sung khác chỉ định dữ liệu sẽ được in. Chúng xảy ra theo một trình tự theo trình định dạng.

snprintf () Giá trị trả về

Nếu thành công, snprintf()hàm trả về số ký tự đã được viết cho bộ đệm đủ lớn, ngoại trừ ký tự null kết thúc. Khi thất bại, nó trả về một giá trị âm.

Kết quả đầu ra được coi là được ghi hoàn chỉnh nếu và chỉ khi giá trị trả về là không âm và nhỏ hơn buf_size.

Ví dụ: Hàm snprintf () hoạt động như thế nào

 #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; )

Khi bạn chạy chương trình, đầu ra sẽ là:

 Xin chào, tôi là Max và tôi 23 tuổi Số ký tự được viết = 34

thú vị bài viết...