字符串的格式化sprintf与sscanf详解

简介: 字符串的格式化sprintf与sscanf详解

sprintf


sprintf 基本知识


头文件


#include <stdio.h>


函数声明


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


功能:


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


参数:


str:字符串首地址
format:字符串格式,用法和printf()一样


返回值:


成功:实际格式化的字符个数
失败: - 1


sprintf 常见用法


格式化字符串


//1. 格式化字符串
char buf[1024] = { 0 };
sprintf(buf, "你好,%s,欢迎加入我们!", "露露");
printf("buf的内容是:%s\n", buf);
memset(buf, 0, 1024);
sprintf(buf, "我今年%d岁了!", 20);
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;
sprintf(buf, "%d", num);
printf("数字转字符串 buf:%s\n", buf);
//设置宽度 右对齐
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("16进制buf:%s\n", buf);
//转成8进制字符串
memset(buf, 0, 1024);
sprintf(buf, "0%o", num);
printf("8进制buf:%s\n", buf);



更多格式可以参考我的另一篇博客:


https://yangyongli.blog.csdn.net/article/details/120522117


sscanf


sscanf 基本知识


头文件


#include <stdio.h>


函数声明


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


功能:


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


参数:


str:指定的字符串首地址
format:字符串格式,用法和scanf()一样


返回值:


成功:成功则返回参数数目,失败则返回-1
失败: - 1


%输入格式含义


image.png


sccanf 常见用法


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//1. 跳过数据
void test01() {
  char buf[1024] = { 0 };
  //跳过前面的数字
  //匹配第一个字符是否是数字,如果是,则跳过
  //如果不是则停止匹配
  sscanf("123456aaaa", "%*d%s", buf);
  printf("跳过数据 buf:%s\n", buf);
  printf("----------------------------\n");
}
//2. 读取指定宽度数据
void test02() {
  char buf[1024] = { 0 };
  sscanf("123456aaaa", "%7s", buf);
  printf("读取指定宽度数据 buf:%s\n", buf);
  printf("----------------------------\n");
}
//3. 匹配a-z中任意字符
void test03() {
  char buf[1024] = { 0 };
  //先匹配第一个字符,判断字符是否是a-z中的字符,如果是匹配
  //如果不是停止匹配
  sscanf("abcdefg123456", "%[a-z]", buf);
  printf("匹配a-z中任意字符 buf:%s\n", buf);
  printf("----------------------------\n");
}
//4. 匹配aBc中的任何一个
void test04() {
  char buf[1024] = { 0 };
  //先匹配第一个字符是否是aBc中的一个,如果是,则匹配,如果不是则停止匹配
  sscanf("abcdefg123456", "%[aBc]", buf);
  printf("匹配aBc中的任何一个 buf:%s\n", buf);
  printf("----------------------------\n");
}
//5. 匹配非a的任意字符
void test05() {
  char buf[1024] = { 0 };
  //先匹配第一个字符是否是aBc中的一个,如果是,则匹配,如果不是则停止匹配
  sscanf("bcdefag123456", "%[^a]", buf);
  printf("匹配非a的任意字符 buf:%s\n", buf);
  printf("----------------------------\n");
}
//6. 匹配非a-z中的任意字符
void test06() {
  char buf[1024] = { 0 };
  //先匹配第一个字符是否是aBc中的一个,如果是,则匹配,如果不是则停止匹配
  sscanf("123456ABCDbcdefag", "%[^a-z]", buf);
  printf("匹配非a-z中的任意字符 buf:%s\n", buf);
  printf("----------------------------\n");
}
int main()
{
  test01();
  test02();
  test03();
  test04();
  test05();
  test06();
  return 0;
}


输出结果:


相关文章
|
8月前
|
存储 C语言
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现2
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现
|
Linux C语言 开发者
深入解析Linux环境下的scanf()、sscanf()和fscanf()函数
在C语言中,`scanf()`、`sscanf()`和`fscanf()`是用于输入的三个常用函数。它们允许开发者从标准输入、字符串和文件中按照指定的格式读取数据。在Linux环境下,这些函数被广泛用于处理各种输入。本文将详细介绍这三个函数的用法,包括格式化字符串的语法和一些常见的使用场景。
845 1
|
3月前
使用 printf() 与 %c 格式化输出一个字符
【10月更文挑战第12天】使用 printf() 与 %c 格式化输出一个字符。
20 4
|
3月前
|
存储
底层文件操作的各种函数(二)------printf,fprintf,sprintf,scanf,fscanf,sscanf的对比以及文件缓冲区
底层文件操作的各种函数(二)------printf,fprintf,sprintf,scanf,fscanf,sscanf的对比以及文件缓冲区
61 2
|
7月前
格式化输出──printf()函数
【6月更文挑战第24天】格式化输出──printf()函数。
77 7
|
7月前
|
C语言
【C语言】:浅谈函数 fscanf/sscanf 和 fprintf/sprintf
【C语言】:浅谈函数 fscanf/sscanf 和 fprintf/sprintf
91 1
|
8月前
|
Java 编译器 C语言
深入了解字符(串)函数 -- -- 字符(串)函数的实现(strlen、strcpy、strcmp、strcat、strstr、)内存函数的实现(memcpy、memmove)
深入了解字符(串)函数 -- -- 字符(串)函数的实现(strlen、strcpy、strcmp、strcat、strstr、)内存函数的实现(memcpy、memmove)
53 0
|
8月前
|
存储 C语言
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现1
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现
|
安全 C++ 数据格式
C++ 字符串格式化转为 数据变量 - sscanf,sscanf_s及其相关用法
C++ 字符串格式化转为 数据变量 - sscanf,sscanf_s及其相关用法
248 0
|
C语言
【C语言】scanf/fscanf/sscanf和printf/fprintf/sprintf的详细介绍
【C语言】scanf/fscanf/sscanf和printf/fprintf/sprintf的详细介绍