snprintf 是 C 语言标准库中的一个函数,用于格式化字符串并写入到缓冲区中。与 sprintf 不同的是,snprintf 允许指定最大写入的字符数,这可以防止缓冲区溢出,从而提高代码的安全性。
概念:
snprintf 函数根据格式化字符串 format 和随后的参数列表,将格式化的数据写入到 buffer 指定的缓冲区中。该函数最多写入 size - 1 个字符,并在末尾自动添加一个空字符 ('\0') 来确保结果是一个空终止的字符串。
函数原型如下:
int snprintf(char *buffer, size_t size, const char *format, ...);
参数说明:
buffer:指向目标缓冲区的指针,格式化后的字符串将被写入到这个缓冲区。size:缓冲区的大小,snprintf不会写入超过size - 1个字符,以防止缓冲区溢出。format:格式化字符串,它指定了如何格式化随后的参数。...:可变参数列表,根据format指定的格式进行格式化。
返回值:- 如果成功,返回写入到
buffer中的字符数(不包括结尾的空字符)。 - 如果发生错误,返回一个负数。
使用案例:
以下是一个使用 snprintf 函数的例子,它将整数和浮点数格式化为字符串,并确保不会超出缓冲区的大小。
#include <stdio.h>
int main() {
char buffer[50]; // 定义一个足够大的缓冲区
int num = 123;
float pi = 3.14159;
// 使用 snprintf 将整数格式化为字符串并写入缓冲区
int len = snprintf(buffer, sizeof(buffer), "Integer: %d", num);
printf("Formatted string: %s (Length: %d)\n", buffer, len);
// 使用 snprintf 将浮点数格式化为字符串并写入缓冲区
len = snprintf(buffer, sizeof(buffer), "Pi: %.4f", pi);
printf("Formatted string: %s (Length: %d)\n", buffer, len);
return 0;
}
在这个例子中,snprintf 被用来将整数 num 和浮点数 pi 格式化为字符串,并将结果存储在 buffer 中。由于 buffer 的大小是 50 个字符,所以即使格式化字符串非常长,snprintf 也会确保不会超出缓冲区的大小。程序将输出:
Formatted string: Integer: 123 (Length: 13)
Formatted string: Pi: 3.1416 (Length: 10)
使用 snprintf 是一种安全的做法,因为它可以防止缓冲区溢出,这是许多安全漏洞的来源。


















