C++中sprintf(),sscanf()的妙用

admin 2025-10-1 10 10/1
AI智能摘要
文章介绍了C/C++中sprintf和sscanf函数在类型转换与字符串处理中的巧妙应用。通过多个代码示例,展示了sprintf如何将各种数据类型格式化并写入字符串,实现高效的数据拼接与精度控制,同时提醒注意缓冲区溢出问题。sscanf则用于从字符串中按格式提取数据,两者与printf、scanf用法相似但目标不同。这些函数简化了类型转换操作,提升了编程灵活性。
— 此摘要由AI分析文章内容生成,仅供参考。
平时我们在写代码过程中,会遇到类型转换的时候,这玩意一直让我挺头疼的,结果今天看题解的时候发现一个非常神奇的函数:sprintf,sscanf。(C语言也可以用)
大家会发现这两个函数名跟printf,scanf很像。
sprintf函数打印到字符串中,而printf函数打印输出到屏幕上。sprintf函数在我们完成其他数据类型转换成字符串类型的操作中应用广泛。(要注意字符串的长度要足够容纳打印的内容,否则会出现内存溢出)。
所以通俗来讲就是把一堆东西打印到了一个字符串里了。
管你听没听懂,直接上案例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
int main() {
    printf("=== C语言sprintf()函数用法演示 ===\n\n");
    printf("1. 基本用法演示\n");
    printf("================\n");
    char str[100];
    int num = 123;
    sprintf(str, "数字是: %d", num);
    printf("sprintf结果: %s\n", str);
    printf("说明: sprintf将格式化的字符串写入字符数组,而不是输出到屏幕\n");

    printf("\n2. 精度控制演示\n");
    printf("================\n");
    char str[20];
    double f = 14.309948;
    sprintf(str, "%6.2f", f);
    printf("原始数值: %.6f\n", f);
    printf("格式化结果: '%s'\n", str);
    printf("说明: %%6.2f 表示总宽度6位,小数点后2位\n");

    printf("\n3. 多个数值连接演示\n");
    printf("==================\n");
    char str[30];
    int a = 20984, b = 48090;
    sprintf(str, "%3d%6d", a, b);
    printf("数值a: %d, 数值b: %d\n", a, b);
    printf("连接结果: '%s'\n", str);
    printf("说明: %%3d%%6d 将两个整数按指定宽度连接\n");

    printf("\n4. 字符串连接演示\n");
    printf("================\n");
    char str[20];
    char s1[5] = {'A', 'B', 'C', '\0'};
    char s2[5] = {'T', 'Y', 'X', '\0'};
    sprintf(str, "%.3s%.3s", s1, s2);
    printf("字符串s1: %s\n", s1);
    printf("字符串s2: %s\n", s2);
    printf("连接结果: %s\n", str);
    printf("说明: %%.3s%%.3s 连接两个字符串,每个最多取3个字符\n");

    return 0;
}
你直接复制代码自己去研究就行,接下来我来具体详解一下。
这里以sprintf来解释一下,sscanf同理。
sprintf(你要放的字符串,"这里跟printf里放的一样,比如%d%d之类的",a,b,c,d······)
简单点讲就是第一空填你要把内容放到的字符串名称,后面的跟正常printf一样的格式就可以。
比如:
int a,b;
printf("%d%d",a,b);//这是输出的写法
string s;
sprintf(s,"%d%d",a,b);//这是sprintf的写法
sprintf就是不管什么类型都可以写到字符串里,省去了类型转换的苦恼。
sscanf实话说跟这个相差不多。
- THE END -

admin

10月01日22:59

最后修改:2025年10月1日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论