前言

具体输入命令:

man 3 sprintf/snprintf

即可查阅到完整的资料信息。

sprintf 函数

函数原型:

#include <stdio.h> //使用此函数需导入此头文件
int sprintf(char *str, const char *format, ...);

参数说明:

  • char *str:指向一个字符数组的指针,用于存储格式化后的字符串。
  • const char *format:一个格式字符串,它包含了需要写入str的文本以及格式说明符(例如%d、%s等),用于控制变量值的格式。
  • ...:可变参数列表,表示format中的格式说明符所对应的变量。

返回值:

  • sprintf函数返回一个整数,表示成功写入字符数组的字符个数 (不包括空字符\0)

注意:sprintf函数在处理字符串时可能会引起缓冲区溢出,因为它没有检查目标缓冲区的大小。为了避免这种情况,可以使用snprintf函数,它允许你指定目标缓冲区的最大大小。

下面是一个简单的示例,说明如何使用sprintf函数:

#include <stdio.h>

int main() {
    char buffer[50];
    int num = 42;
    float pi = 3.14159;

    sprintf(buffer, "整数: %d, 浮点数: %.2f", num, pi);
    printf("格式化后的字符串: %s\n", buffer);

    return 0;
}

输出:

格式化后的字符串: 整数: 42, 浮点数: 3.14
  • 在这个示例中,我们将两个变量(一个整数和一个浮点数)格式化为字符串,并将结果存储在buffer字符数组中。我们使用%d格式说明符表示整数,%.2f表示保留两位小数的浮点数。printf函数最后将格式化后的字符串输出。

snprintf 函数

函数原型:

int snprintf(char *str, size_t size, const char *format, ...);

参数说明:

  • char *str:指向一个字符数组的指针,用于存储格式化后的字符串。
  • size_t size:目标缓冲区str的最大大小(包括空字符\0)。
  • const char *format:一个格式字符串,它包含了需要写入str的文本以及格式说明符(例如%d、%s等),用于控制变量值的格式。
  • …:可变参数列表,表示format中的格式说明符所对应的变量。

返回值:

  • snprintf函数返回一个整数,表示按照给定格式所需的字符个数(不包括空字符\0)
  • 如果返回值小于size,则表示格式化的字符串完整地存储在str中。
  • 如果返回值大于或等于size,则表示目标缓冲区str的大小不足以容纳完整的格式化字符串,只有部分内容被写入。

下面是一个使用snprintf函数的示例:

#include <stdio.h>

int main() {
    char buffer[50];
    int num = 42;
    float pi = 3.14159;

    int result = snprintf(buffer, sizeof(buffer), "整数: %d, 浮点数: %.2f", num, pi);

    if (result < sizeof(buffer)) {
        printf("格式化后的字符串: %s\n", buffer);
    } else {
        printf("缓冲区太小,需要 %d 个字符空间\n", result);
    }

    return 0;
}

输出:

格式化后的字符串: 整数: 42, 浮点数: 3.14

在这个示例中,我们使用snprintf函数将两个变量(一个整数和一个浮点数)格式化为字符串,并将结果存储在buffer字符数组中。我们指定了目标缓冲区的最大大小sizeof(buffer)。printf函数最后将格式化后的字符串输出。如果缓冲区大小不足以容纳完整的格式化字符串,我们将输出一个提示信息。

04-27 21:35