C语言字符串处理函数 sprintf() 和 sscanf() 的使用

admin 2025-11-16 阅读:38 评论:0
字符串函数(String processing function)也叫字符串处理函数whatsapp网页版登录whatsapp web,指的是编程语言中用来进行字符串处理的函数。本文主要介绍 C语言中符串处理函数 sprintf() 和 s...

字符串函数(String processing function)也叫字符串处理函数whatsapp网页版登录whatsapp web,指的是编程语言中用来进行字符串处理的函数。本文主要介绍 C语言中符串处理函数 sprintf() 和 sscanf() 的使用方法,以及相关的示例代码。

1、sprintf()

根据参数 format 字符串来转换并格式化数据whatsapp官网,然后将结果输出到 str 指定的空间中, 直到出现字符串结束符 ‘\0’ 为止。代码如下,

#include
#include
#include
int main()
{
/*
int sprintf(char *_CRT_SECURE_NO_WARNINGS, const char *format, ...);
参数
str:字符串首地址
format:字符串格式,用法和 printf()一样
返回值
成功:实际格式化的字符个数
失败:-1
*/
    //1. 格式化字符串
    char buf[1024] = { 0 };
    sprintf(buf, "你好,%s,", "cjavapy");
    printf("buf:%s\n",buf);
    memset(buf, 0, 1024);
    sprintf(buf, "我今年%d", 5);
    printf("buf:%s\n", buf);
    //2. 拼接字符串
    memset(buf, 0, 1024);
    char str1[] = "hello";
    char str2[] = "world";
    int len = sprintf(buf,"%s %s",str1,str2);
    printf("buf:%s len:%d\n", buf,len);
    //3. 数字转字符串
    memset(buf, 0, 1024);
    int num = 100;
    int f1 = 100.111;
    sprintf(buf, "%d", num);
    memset(buf, 0, 1024);
    int f2 = 100.111;
    sprintf(buf, "%f", f2);
    printf("buf:%s\n", buf);
    //4. 设置对齐与输出格式
    //设置宽度 右对齐
    memset(buf, 0, 1024);
    sprintf(buf, "%8d", num);
    printf("buf:%s\n", buf);
    //设置宽度 左对齐
    memset(buf, 0, 1024);
    sprintf(buf, "%-8d", num);
    printf("buf:%s\n", buf);
    //转成16进制字符串 小写
    memset(buf, 0, 1024);
    sprintf(buf, "0x%x", num);
    printf("buf:%s\n", buf);
    //转成8进制字符串
    memset(buf, 0, 1024);
    sprintf(buf, "0%o", num);
    printf("buf:%s\n", buf);
    return 0;
}

2、sscanf()

从 str 指定的字符串读取数据,并根据参数 format 字符串来转换并格式化数据。代码如下,

#include 
#include 
int main ()
{
/*
int sscanf(const char *str, const char *format, ...);
参数
str:指定的字符串首地址
format:字符串格式,用法和 scanf()一样
返回值
成功:参数数目,成功转换的值的个数
失败: - 1
*/
 /*
    //* 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)*/
    const char *p1 = "abcd123";
    char buf1[32] = { 0 };
    sscanf(p1, "%*[a-z]%s", buf1); //跳过字母
    printf("-- buf1[%s]--\n", buf1);
    //[a|b|c]表示a,b,c中选一
    const char *p2 = "3b";
    char buf2_1[32] = { 0 };
    char buf2_2[32] = { 0 };
    sscanf(p2, "%[1|2|3]%c", buf2_1, buf2_2);  //或运算符使用
    printf("-- buf1[%s]--buf2_2[%s]---\n", buf2_1, buf2_2);
    
    //[d],表示可以有d也可以没有d。
    const char *p3 = "b";
    char buf3_1[32] = { 0 };
    char buf3_2[32] = { 0 };
    sscanf(p3, "%[3]%c", buf3_1, buf3_2);  //无法提取任何数据
    printf("-- buf1[%s]--buf2_2[%s]---\n", buf3_1, buf3_2);
    
    //[d],表示可以有d也可以没有d。
    const char *p4 = "b";
    char buf4_1[32] = { 0 };
    char buf4_2[32] = { 0 };
    sscanf(p4, "%c%[3]", buf4_1, buf4_2);  //可以正常提取b
    printf("-- buf1[%s]--buf2_2[%s]---\n", buf4_1, buf4_2);
    //结论:sscanf提取字符串必须知道字符串的具体格式,使用上不如正则灵活
    
    //width表示读取宽度。
    const char *p5 = "abcdef123";
    char buf5_1[32] = { 0 };
    char buf5_2[32] = { 0 };
    sscanf(p5, "%3s%s", buf5_1, buf5_2);  //%3s 表示提取3个字符的字符串
    printf("-- buf1[%s]--buf2_2[%s]---\n", buf5_1, buf5_2);
    
    // h|I|I64 是配合%d提取整数使用 L 是配合%f提取浮点数使用,h表示short类型数据,I表示int类型数据,I64表示长整型数据
    const char *p6 = "123578abc";
    int buf6_1;
    char buf6_2[32] = { 0 };
    sscanf(p6, "%Id%s", &buf6_1, buf6_2);
    printf("-- buf1[%d]--buf2_2[%s]---\n", buf6_1, buf6_2);
    
    //控制字符
    //  %c 一个单一的字符
    //    %d 一个十进制整数
    //    %i 一个整数
    //    %e, %f, %g 一个浮点数
    //    %o 一个八进制数
    //    %s 一个字符串
    //    %x 一个十六进制数
    //    %p 一个指针
    //    %n 一个等于读取字符数量的整数
    //    %u 一个无符号整数
    //    %[] 一个字符集
    //    %% 一个精度符号
    const char *p7 = "123578abc";
    char ch7 = 0;
    char buf7_2[32] = { 0 };
    sscanf(p7, "%c%s", &ch7, buf7_2);
    printf("-- buf1[%c]--buf2_2[%s]---\n", ch7, buf7_2);
    
    //sscanf函数遇到空格停止读取字符串,所有需要特地注明空格
    const char *p8 = "123   578a  bc";
    char buf8_1[32] = { 0 };
    char buf8_2[32] = { 0 };
    sscanf(p8, "%s%*[ ]%s", buf8_1,buf8_2); //格式化里有空格,可以提取
    printf("-- buf1[%s]--buf2_2[%s]---\n", buf8_1, buf8_2);
    
    //^ 取到指定字符为止的字符串
    const char *p9 = "123abc";
    char buf9_1[32] = { 0 };
    char buf9_2[32] = { 0 };
    sscanf(p9, "%[^2]%s", buf9_1,buf9_2);
    printf("-- buf1[%s]--buf2_2[%s]---\n", buf9_1, buf9_2);
    
    //截取到指定字符串 "3ab"
    const char *p10 = "12-3ab-c";
    char buf10_1[32] = { 0 };
    char buf10_2[32] = { 0 };
    sscanf(p10, "%*[^-]-%[^-]%s", buf10_1, buf10_2); 
    printf("-- buf1[%s]--buf2_2[%s]---\n", buf10_1, buf10_2);
   return(0);
}

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

分享:

扫一扫在手机阅读、分享本文

热门文章
  • 详细指南:WhatsApp国内使用方法全攻略-下载安装、注册登录及功能使用攻略

    详细指南:WhatsApp国内使用方法全攻略-下载安装、注册登录及功能使用攻略
    一、下载与安装WhatsApp WhatsApp是一款全球使用范围极广的即时通讯软件,不仅可以实现文本聊天,还能进行语音、视频通话WhatsApp中文版,发送文件等功能。由于众所周知的原因,国内用户想要下载和安装WhatsApp可能会遇到一些困难。不过,只要按照以下步骤操作,就能顺利完成WhatsApp的下载和安装。 首先,我们需要解决的是下载问题。由于WhatsApp在国内的应用商店无法直接下载,所以我们需要寻找其他的下载途径。Android用户可以选择到各大安卓市场搜索下...
  • 苹果IOS5.1.1机完美越狱

    苹果IOS5.1.1机完美越狱
    越狱工具下载:(需手动复制: http://bbs./read-htm-tid-4804612.html ) 详细的越狱教程: Absinthe 2.0.4的越狱方法与Absinthe 1.0的越狱方法完全一样,非常简单的“傻瓜一键式”。不过这里绿毒有说明,最好重新刷固件。支持越狱设备IOS5.1.1的固件下载地址请点击本站的IOS固件下载,看下图: 下载完固件之后,把设备连接iTunes,开始刷固件。你也可以选择不刷,但是在越狱的过程之中,新的系统在越狱时会比较的顺利,...
  • 电脑微信的聊天照片文件在哪里微信图片保存电脑哪个文件夹

    电脑微信的聊天照片文件在哪里微信图片保存电脑哪个文件夹
    1. 怎么找到微信聊天图片在哪个文件夹里 图片保存路径:/storage/emulated/tencent/MicroMsg/WeiXin/文件夹,这个是完整路径。而在文件夹中只需要找到/tencent/MicroMsg/WeiXinWhatsApp中文版,就可以了,前面两个文件夹是系统根目录。以下是保存及查找图片的方法步骤介绍。 第一步、找到桌面的微信APP,直接点击打开这个微信的APP。 2. 电脑微信图片保存在哪个文件夹 个人微信文件夹。 电脑版微信聊天的图片,都保存到...
  • Windows 11版WhatsApp将从UWP/Native切换回WebView2打包模式

    Windows 11版WhatsApp将从UWP/Native切换回WebView2打包模式
    Meta(最近更名为 Meta AI)悄然宣布,WhatsApp 将在 Windows 11 上放弃 UWP(WinUI)WhatsApp中文版,退回采用基于 Chromium 的容器。这意味着 WhatsApp 又回到了几年前的样子。由于 web.whatsapp.com 一直领先于 Windows 应用开发,它确实拥有一些新功能,但速度更慢,占用更多内存。 如果独立开发者因为无力维护所有平台的代码库而选择 Web 应用程序,那是一回事,但当像 Meta 这样价值万亿美元...
  • 小米下載WhatsApp的完整指南:安装与使用注意事项

    小米下載WhatsApp的完整指南:安装与使用注意事项
    综上所述,确保您的小米手机具备以上条件,将有助于您顺利下载和安装WhatsApp,享受便捷的通讯服务。在满足这些条件后,您就可以按照后续步骤进行WhatsApp的下载和安装。 2. 下载和安装WhatsApp的具体步骤 在小米手机上下载和安装WhatsApp的具体步骤相对简单,但需注意一些特殊情况。首先,确保你的手机系统已更新到最新版本,以保证最佳的兼容性。由于安卓手机商店内无法直接找到WhatsApp,你可以通过APKPure等第三方应用商店进行下载。打开APKPure应用...