Hàm vsprintf() trong C

Hàm int vsprintf(char *str, const char *format, va_list arg) trong Thư viện C chuẩn gửi output đã được định dạng tới một chuỗi string bởi sử dụng một danh sách tham số.

Khai báo hàm vsprintf() trong C

Dưới đây là phần khai báo cho hàm vsprintf() trong C:

int vsprintf(char *str, const char *format, va_list arg)

Tham số

str − Đây là mảng các phần tử char nơi chuỗi kết quả được lưu trữ.

format − Đây là chuỗi chứa text để được ghi tới str. Nó có thể tùy ý chứa các thẻ định dạng có thể được nhúng mà được thay thế bởi các giá trị được xác định trong các tham số bổ sung tiếp theo và được định dạng theo yêu cầu. Nguyên mẫu các thẻ định dạng là %[flags][width][.precision][length]specifier, được giải thích như dưới đây:

specifierKết quả
cKý tự
d hoặc iSố nguyên hệ thập phân có dấu
eKý hiệu khoa học (mantissa/exponent) sử dụng ký tự e
EKý hiệu khoa học (mantissa/exponent) sử dụng ký tự E
fSố thực dấu chấm động hệ thập phân
gSử dụng rút gọn của %e hoặc %f
GSử dụng rút gọn của %E hoặc %f
oSố bát phân có dấu
sChuỗi ký tự
uSố nguyên hệ thập phân không dấu
xSố nguyên hệ thập lục phân không dấu
XSố nguyên hệ thập lục phân không dấu (các chữ cái hoa)
pĐịa chỉ con trỏ
nKhông in cái gì
%Ký tự

flagsMiêu tả
-Căn chỉnh trái vào bên trong độ rộng trường đã cho. Căn chỉnh phải là mặc định
+Ép buộc đặt trước kết quả một dấu cộng hoặc trừ (+ hoặc -) ngay cả với các số dương. Theo mặc định, chỉ có các số âm được đặt trước bởi một dấu -
(space)Nếu không có ký hiệu nào được ghi, thì một khoảng trống sẽ được chèn trước giá trị
#Được sử dụng với các specifier là o, x hoặc X. Giá trị được đặt trước với 0, 0x hoặc 0X tương ứng cho các giá trị khác 0. Sử dụng với e, E và f, nó ép buộc output đã được ghi để thu nhận một con trỏ thập phân ngay cả nếu không có chữ số nào theo sau. Theo mặc định, nếu không có chữ số nào theo sau thì không có con trỏ thập phân được ghi. Sử dụng với g hoặc G, kết quả là giống với e hoặc E nhưng các số 0 ở cuối không bị gỡ bỏ
0Đệm vào bên trái (left-pad) của số với các số 0 thay vì bởi các khoảng trống

widthMiêu tả
(number)Số ký tự tối thiểu để được in. Nếu giá trị để được in là ngắn hơn số này, thì kết quả được đệm thêm với các khoảng trống. Giá trị không bị cắt ngay cả khi kết quả là quá lớn
*Độ rộng không được xác định trong chuỗi định dạng format, nhưng như một tham số giá trị nguyên bổ sung đặt trước tham số đó mà phải được định dạng

.precisionMiêu tả
.numberVới các Integer Specifier (d, i, o, u, x, X) − thì Precision xác định số chữ số nhỏ nhất được ghi. Nếu giá trị được ghi là ngắn hơn số này thì kết quả được đệm thêm với các 0 vào đầu. Giá trị không bị cắt ngay cả nếu kết quả là dài hơn. Một precision là 0 nghĩa là không có ký tự nào được ghi cho giá trị 0. Với e, E và f specifier: đây là số chữ số để được in sau điểm thập phân. Với g và G specifier: đây là số chữ số có nghĩa tối đa để được in. Với s specifier: đây là số ký tự tối thiểu để được in. Theo mặc định, tất cả ký tự được in tới khi bắt gặp ký tự null cuối cùng. Với kiểu c: nó không có ảnh hưởng. Khi không có precision nào được xác định, thì mặc định là 1. Nếu period được xác định mà không kèm với một giá trị precision rõ ràng, thì 0 được giả sử
.*Precision không được xác định trong chuỗi định dạng format, nhưng như một tham số giá trị nguyên bổ sung đặt trước tham số đó mà phải được định dạng

lengthMiêu tả
hTham số được thông dịch như một short int hoặc unsigned short int (chỉ được áp dụng cho integer specifiers: i, d, o, u, x và X)
lTham số được thông dịch như một long int hoặc unsigned long int cho integer specifier (i, d, o, u, x và X), và như một wide char hoặc wide char string cho các specifier là c và s
LTham số được thông dịch như một long double (chỉ được áp dụng cho các floating point specifier: e, E, f, g và G)

arg − Một đối tượng biểu diễn danh sách tham số biến. Nó nên được khởi tạo bởi va_start macro được định nghĩa trong <stdarg>.

Trả về giá trị

Nếu thành công, tổng số ký tự đã được ghi sẽ được trả về, nếu không sẽ trả về một số âm.

Ví dụ

Chương trình C sau minh họa cách sử dụng của hàm vsprintf() trong C:

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

char buffer[80];
int vspfunc(char *format, ...)
{
   va_list aptr;
   int ret;

   va_start(aptr, format);
   ret = vsprintf(buffer, format, aptr);
   va_end(aptr);

   return(ret);
}

int main()
{
   int i = 5;
   float f = 27.0;
   char str[50] = "QTM xin chao cac ban !!!";

   vspfunc("%d %f %s", i, f, str);
   printf("%s\n", buffer);
   
   return(0);
}

Biên dịch và chạy chương trình C trên để xem kết quả.

Theo Tutorialspoint

Bài trước: Hàm vfprintf() trong C

Bài tiếp: Hàm fscanf() trong C

Thứ Tư, 29/08/2018 09:42
52 👨 1.121
0 Bình luận
Sắp xếp theo
    ❖ Lập trình C