跳到主要内容

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写入字符字符串
di将有符号整数转换为十进制表示
o将无符号整数转换为八进制表示
Xx将无符号整数转换为十六进制表示
u将无符号整数转换为十进制表示
Ff将浮点数转换为十进制表示
Ee将浮点数转换为十进制指数表示法
Aa将浮点数转换为十六进制指数表示法
Gg将浮点数转换为十进制或十进制指数表示法
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