C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C语言 sscanf和sprintf

C语言中的sscanf和sprintf常见用途

作者:yuyousheng_

sscanf和sprintf是C语言中用于字符串与数据转换的函数,类似scanf/printf但处理字符串而非输入输出流,本文给大家介绍C语言中的sscanf和sprintf常见用途,感兴趣的朋友一起看看吧

sscanfsprintf 是 C 语言中非常重要的两个标准库函数,它们都定义在 <stdio.h> 头文件中。这两个函数可以看作是 scanfprintf 的“非交互式”版本,即它们不直接与用户的键盘和屏幕进行输入输出,而是与**字符串(字符数组)**进行数据的读取和写入。

1. sprintf 函数

sprintf 的功能类似于 printf,但它不是将格式化的数据输出到屏幕,而是输出到一个字符串(字符数组)中

函数原型

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

参数说明

返回值

示例

#include <stdio.h>
int main() {
    char buffer[100];
    int age = 25;
    float height = 1.78;
    char name[] = "Alice";
    // 将多个变量格式化为一个字符串
    sprintf(buffer, "Name: %s, Age: %d, Height: %.2f", name, age, height);
    printf("Formatted string: %s\n", buffer);
    // 输出:Formatted string: Name: Alice, Age: 25, Height: 1.78
    return 0;
}

常见用途

⚠️ 注意安全问题:使用 sprintf 时必须确保目标缓冲区 str 足够大,否则会发生缓冲区溢出,导致程序崩溃或安全漏洞。推荐使用更安全的替代函数 snprintf

2. sscanf 函数

sscanf 的功能类似于 scanf,但它不是从标准输入(键盘)读取数据,而是从一个字符串中按指定格式提取数据

函数原型

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

参数说明

返回值

示例

#include <stdio.h>
int main() {
    char input[] = "John 30 1.75";
    char name[50];
    int age;
    float height;
    // 从字符串中解析姓名、年龄和身高
    int result = sscanf(input, "%s %d %f", name, &age, &height);
    if (result == 3) {
        printf("Name: %s, Age: %d, Height: %.2f\n", name, age, height);
        // 输出:Name: John, Age: 30, Height: 1.75
    } else {
        printf("Parsing failed!\n");
    }
    return 0;
}

高级用法示例

char line[] = "Date: 2023-10-05, Temperature: 23.5C";
int year, month, day;
float temp;
// 提取日期和温度
sscanf(line, "Date: %d-%d-%d, Temperature: %fC", &year, &month, &day, &temp);
printf("Year: %d, Month: %d, Day: %d, Temp: %.1f°C\n", year, month, day, temp);

常见用途

总结对比

函数数据流向类比函数主要用途
sprintf变量 → 字符串printf格式化数据存入字符串
sscanf字符串 → 变量scanf从字符串中解析并提取结构化数据

安全建议

由于 sprintf 容易导致缓冲区溢出,强烈建议使用 snprintf 替代 sprintf

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

snprintf 多了一个 size 参数,指定目标缓冲区的大小,可以有效防止溢出。

同样,虽然 sscanf 相对安全,但也要注意格式字符串和目标变量类型的匹配,避免未定义行为。

掌握 sscanfsprintf 能让你在处理字符串和数据转换时更加灵活高效,是 C 语言编程中的必备技能。

到此这篇关于C语言中的sscanf和sprintf常见用途的文章就介绍到这了,更多相关C语言 sscanf和sprintf内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文