C 语言 snprintf() 函数

17 Mar 2025 | 4 分钟阅读

在本节中,我们将讨论 C 编程语言中的 snprintf() 函数。snprintf 是 stdio.h 头文件中预定义的一个库函数,它将标准 printf() 函数的输出重定向到其他缓冲区。

snprintf() 函数用于将给定字符串格式化为缓冲区区域中的一系列字符或值。snprintf() 函数包含一个“n”参数,表示存储在缓冲区区域中的最大字符数,包括空字符。

snprintf 函数还返回写入或插入到缓冲区中的字符数。然而,这些字符由 printf() 函数在打印语句或 stdout 头文件中的字符中返回或显示。

snprintf() function in C

注意:snprintf() 函数会在结果输出的末尾插入一个空字符,该字符也被计入缓冲区的大小。此外,缓冲区是一个只存储字符类型元素,而不是字符串类型元素的数组。

C 语言中 snprintf() 函数的语法

以下是 C 编程语言中 snprintf() 函数的语法。

参数

str: 它是一个字符类型数组缓冲区。

size: 它定义了可以存储在缓冲区中的最大字符数。

format: 在 C 语言中,字符串定义了一个格式,其中包含与 printf() 函数在 stdio.h 头文件中定义的相同类型的规范。

…: 它是一个可选的 (…) 参数或实参。

返回值

snprintf() 函数返回已写入或存储到足够大的缓冲区中的字符或值的数量,不包括空终止字符。如果写入的字符数大于缓冲区大小,则返回负值。如果缓冲区大小太小,给定字符串将被截断或缩减到缓冲区大小。

示例 1: 演示 C 语言中 snprintf() 函数的程序

让我们创建一个程序,检查缓冲区大小并使用 C 语言中的 snprintf() 函数返回输入到缓冲区中的字符数。

当我们执行上述程序时,它会在控制台屏幕上产生给定的输出。

The given string is: Javatpoint.com

Count the stored character: 16

第二次执行

The given string is: Javatpoint.com
Count the stored character: -1

现在我们将最大输入字符数从 34 减少到 14,这次它返回一个负数,表示缓冲区大小小于给定字符串。

示例 2: 使用 C 语言中 snprintf() 函数的程序

让我们创建一个示例,使用 C 编程语言中的 snprintf() 函数将字符插入缓冲区并从缓冲区中返回。

当我们执行上述程序时,它会在控制台屏幕上产生给定的输出。

Buffer is written successfully!
Hello friend, My name is David, and I am 19 years old.
No. of characters read: 53

在上面的程序中,我们声明了字符类型缓冲区 buf[200],变量 buf_size 可以插入的最大字符数为 55。如果给定语句在定义范围内,snprintf() 函数将返回从缓冲区读取的总字符数。

第二次执行

Buffer is not completely filled or written.
Hello friend, My name is David and
The return value: -1

当我们定义 buf_size 为 35 时,给定语句会自动被 snprintf() 函数截断,返回一个负数 (-1) 并显示“缓冲区未完全填充或写入”。