C++ sprintf() 函数
C++ 中的 sprintf()
函数用于将格式化的字符串写入字符字符串缓冲区。它定义在 cstdio 头文 件中。
示例
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
char buffer[100];
int age = 23;
// 将 "My age is " 和 age 变量打印到 buffer 变量中
sprintf(buffer, "My age is %d", age);
// 打印 buffer 变量
cout << buffer;
return 0;
}
// 输出:My age is 23
sprintf() 语法
sprintf()
的语法是:
sprintf(char* buffer, const char* format, ...);
其中,
buffer
是需要写入的字符串缓冲区format
是要写入字符串缓冲区的字符串...
在上面的代码中表示您可以向sprintf()
传递多个参数。
sprintf() 参数
sprintf()
函数接受以下参数:
- buffer - 指向用于写入结果的字符串缓冲区的指针。
- format - 指向空终止字符串(C 字符串)的指针,该字符串被写入字符串缓冲区。它由字符组成,还可以包含以
%
开始的可选格式说明符。 - ... - 其他附加参数指定要打印的数据。它们按照格式说明符的顺序出现。
sprintf() 返回值
sprintf()
函数返回:
- 成功时 - 对于足够大的缓冲区,写入的字符数(不包括终止空字符
'\0'
) - 失败时 - 负值
sprintf() 原型
sprintf()
函数在 cstdio 头文件中定义的原型是:
int sprintf(char* buffer, const char* format, ...);
格式说明符
printf()
的 format
参数可以包含以 %
开始的格式说明符。这些说明符被随后格式字符串后面相应变量的值所替换。
格式说明符包含以下部分:
- 一个前导
%
符号 flags
- 一个或多个修改转换行为的标志(可选)-
:在字段内左对齐结果。默认情况下是右对齐。-+
:结果的符号附加在值的开头,即使对于正结果也是如此。- 空格:如果没有符号,结果开头会附加一个空格。
#
:执行转换的另一种形式。0
:用于整数和浮点数。用前导零而不是空格填充数字。
width
- 一个可选的 *
或整数值,用于指定最小宽度字段。
precision
- 一个可选字段,由 .
后跟 *
或整数或无以指定精度。
length
- 一个可选的长度修饰符,用于指定参数的大小。
specifier
- 转换格式说明符。
sprintf() 格式说明符原型
sprintf()
的格式说明符的一般原型是:
%[flags][width][.precision][length]specifier
常用格式说明符
下表列出了一些常用的格式说明符:
格式说明符 | 描述 |
---|---|
% | 一个 % 后跟另一个 % 字符会在屏幕上打印 % |
c | 写入单个字符 |
s | 写入字符字符串 |
d 或 i | 将有符号整数转换为十进制表示 |
o | 将无符号整数转换为八进制表示 |
X 或 x | 将无符号整数转换为十六进制表示 |
u | 将无符号整数转换为十进制表示 |
F 或 f | 将浮点数转换为十进制表示 |
E 或 e | 将浮点数转换为十进制指数表示法 |
A 或 a | 将浮点数转换为十六进制指数表示法 |
G 或 g | 将浮点数转换为十进制或十进制指数表示法 |
n | - 返回到目前为止写入的字符数- 结果写入通过参数指向的值- 参数必须是指向 signed int 的指针 |
p | 写入一个实现定义的字符序列,用以定义指针 |
示例:C++ sprintf()
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
char buffer[100];
int count;
char name[] = "Max";
int age = 23;
// 将字符串和变量的组合写入 buffer 变量
// 将写入的字符数存储在 count 中
count = sprintf(buffer, "Hi, I am %s and I am %d years old", name, age);
// 打印字符串缓冲区
cout << buffer << endl;
// 打印写入的字符数
cout << "Number of characters written = " << count;
return 0;
}
输出
Hi, I am Max and I am 23 years old
Number of characters written = 34