C - fprintf函数 & sprintf函数

fprintf 函数

fprintf 是 C 语言中的一个库函数,用于格式化输出到文件。它是 头文件中定义的一部分。函数名的 “f” 表示 “file”,因为你可以指定输出到哪个文件。

函数原型

int fprintf(FILE *stream, const char *format, ...);

参数

  • stream: 指向 FILE 类型的指针,表示要写入的文件。这通常是由 fopen 函数返回的文件指针。
  • format: 一个字符串,指定后续参数的输出格式。这个格式字符串可以包含普通字符(除了 % 符号外,它们直接复制到输出流)和格式说明符,它们指定后续参数如何格式化。
  • : 表示函数可以接受不定数量的参数,这些参数与 format 字符串中的格式说明符相对应。

返回值

成功时返回一个非负值,表示已写入的字符数。错误时返回一个负值。

示例

#include 

int main() {
    FILE *fp = fopen("output.txt", "w"); // 打开一个名为 "output.txt" 的文件以写入内容
    if(fp == NULL) {
        perror("Error opening file");
        return 1;
    }

    int age = 25;
    fprintf(fp, "John is %d years old.\n", age); // 写入 "John is 25 years old." 到 output.txt 文件

    fclose(fp); // 关闭文件
    return 0;
}

在上面的例子中,我们使用 fprintf 将格式化的字符串写入一个文件。fprintf 的使用方法与 printf 非常相似,主要的区别在于 fprintf 需要一个额外的参数来指定文件指针。

注意

使用 fprintf 或任何写入文件的函数时,一定要确保已经以适当的模式打开了文件,并且在操作完成后关闭文件。

sprintf 函数

sprintf 是 C 语言中的一个库函数,用于格式化字符串并将其保存到另一个字符串中,而不是输出到屏幕或文件。它是 头文件中定义的一部分。函数名的 “s” 表示 “string”,因为它将格式化的结果保存到一个字符串中。

函数原型

int sprintf(char *str, const char *format, ...);

参数

  • str: 指向字符数组的指针,用于存储格式化的输出。
  • format: 一个字符串,指定后续参数的输出格式。这个格式字符串可以包含普通字符(除了 % 符号外,它们直接复制到结果字符串)和格式说明符,它们指定后续参数如何格式化。
  • : 表示函数可以接受不定数量的参数,这些参数与 format 字符串中的格式说明符相对应。

返回值

返回值是写入 str 的字符数,不包括终止的 null 字符。

示例

#include 

int main() {
    char buffer[50];
    int age = 25;
    
    sprintf(buffer, "John is %d years old.", age);
    
    printf("%s\n", buffer); // 输出 "John is 25 years old."
    
    return 0;
}

在上面的例子中,我们使用 sprintf 将格式化的字符串保存到 buffer 中,然后使用 printf 将其输出到屏幕。

注意

  1. 使用 sprintf 时需要确保目标字符串(在上述示例中为 buffer)有足够的空间来存储格式化的结果。如果没有足够的空间,会发生缓冲区溢出,这可能会导致程序崩溃或更糟糕的安全问题。

  2. 为了避免可能的缓冲区溢出,建议使用 snprintf,它允许你指定最大的字符数,从而确保不会写入超过指定大小的内容。

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

snprintf 的使用与 sprintf 类似,但它包括一个额外的 size 参数,该参数指定最大写入字符数(包括最后的 null 字符)。

你可能感兴趣的:(CSAPP,C,c语言,开发语言)