标准C库函数fprintf(),sprintf(),snprintf()的函数使用方法(往文件中写入数据,将变量的值转换成字符串输出)

前言

如果,想要深入的学习标准C库中函数fprintf(),sprintf(),snprintf(),还是需要去自己阅读Linux系统中的帮助文档。

具体输入命令:

man 3 fprintf/sprintf/snprintf

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

fprintf 函数

fprintf()函数是C语言中的一个标准库函数,用于进行格式化输出到文件。它的原型在stdio.h(或者在C++中的cstdio)头文件中定义。

函数的原型如下:

#include <stdio.h> //使用此函数需导入此头文件

int fprintf(FILE *stream, const char *format, ...);
  • fprintf()函数接受三个参数,但第三个参数是可变参数(…),意味着你可以根据需要传递任意数量的参数。

参数的解释如下:

  • FILE *stream:这是一个指向FILE对象的指针,该对象指定了一个输出流。这个流可能与一个文件、设备如终端或其他类型的流如网络连接相关联。通常,你会使用fopen()函数来打开一个文件并获取这个FILE对象的指针。

  • const char *format:这是一个字符串,定义了即将被写入的数据的格式。它可以包含一些格式化说明符,如%s(对应字符串)、%d(对应整数)、%f(对应浮点数)等等。这个字符串可以包含普通的文本,也可以包含这样的格式化说明符,它们会被替换为后续参数提供的值。

  • ...:这是一个可变参数列表,对应于format字符串中的格式化说明符。你可以传递任意数量的参数,每个参数都应该与format字符串中的一个格式化说明符相对应。

返回值:

  • 如果成功,则函数的返回值是一个整数,表示成功写入的字符数。
  • 如果错误,它会返回一个负值。

下面是一个使用fprintf()的例子:

#include <stdio.h>

int main() {
    FILE *file = fopen("test.txt", "w");
    if (file != NULL) {
        fprintf(file, "Hello, %s. You have %d messages.\n", "Alice", 5);
        fclose(file);
    }
    return 0;
}

这个例子会打开一个名为"test.txt"的文件进行写入操作,然后向文件中写入一行文字,格式为"Hello, Alice. You have 5 messages.",然后关闭文件。如果文件无法打开,fopen()会返回NULL,并且不会进行写入操作。

sprintf 函数

sprintf函数是C标准库(Standard C Library)中的一个非常有用的字符串处理函数,它允许你将格式化的输出写入一个字符串。这个函数的原型位于<stdio.h>头文件中。具体来说,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 函数

snprintf函数是C标准库中的一个安全字符串处理函数,它类似于sprintf函数,但允许你指定目标缓冲区的最大大小,从而避免缓冲区溢出的问题。snprintf函数的原型位于<stdio.h>头文件中。

函数原型:

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函数最后将格式化后的字符串输出。如果缓冲区大小不足以容纳完整的格式化字符串,我们将输出一个提示信息。

总结

  • fprintf(), sprintf(), 和 snprintf()都是C语言的标准库函数,用于进行格式化输出。

  • 这些函数都需要接受至少一个C风格字符串作为参数。C风格字符串是一个以’\0’(空字符)结尾的字符数组。

  • fprintf()函数将格式化的输出写入一个FILE对象所指向的流。

  • sprintf()函数将格式化的输出写入一个字符数组。

  • snprintf()函数与sprintf()类似,但它需要一个额外的size参数,用于限制写入字符数组的字符数量,以防止缓冲区溢出。

如果传入的参数不是C风格字符串,可能会引发一些问题,包括缓冲区溢出、未定义的行为以及数据错误。因此,当使用这些函数时,一定要确保传入的是C风格字符串。

最后的最后,如果你觉得我的这篇文章写的不错的话,请给我一个赞与收藏,关注我,我会继续给大家带来更多更优质的干货内容

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿宋同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值