C语言中sscanf函数的简明教程

C语言中的sscanf函数用于从字符串中读取格式化的数据。它根据format字符串解析输入,并将结果存储在对应的参数中。返回值表示成功转换的参数数量。format字符串可以包含宽度、长度修饰符和各种specifier,例如%,%[a-z]等。通过使用不同的specifier和集合操作,可以灵活地处理字符串中的数据。示例包括贪婪模式、长度限制、指定类型和接收并忽略特定字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言中sscanf函数的简明教程

函数定义

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

函数说明

sscanf()定义于头文件stdio.hsscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。

返回值

成功则返回参数数目,失败则返回-1(也即EOF)。

参数中format的说明

format中可以包含一个或多个{%[*][width][length]specifier|' '|'\t'|'\n'|所有非%符号}

注:{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。

  • width:宽度,忽略则为贪婪模式
  • length:对specifier进行修饰,指定存储类型,可选值有hhhllljztL
  • specifier:参考scanf中的specifier

lengthspecifier组合所指定的存储类型表:

存储类型表

注:黄色行表示实现标准为C99

支持集合操作:

  • %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
  • %[aB’] 匹配a、B、'中一员,贪婪性
  • %[^a] 匹配非a的任意字符,贪婪性
  • %*[^=] 匹配=之前的字符串并跳过

注:集合操作的存储格式只能为char*或wchar_t*,即不能用%[0-9]接收并存储为int*

例子

  • 贪婪模式(省略width
char result[100];
sscanf("helloworld", "%s", result);
printf("%s", result);  // helloworld
  • 限定长度
char result[100];
sscanf("helloworld", "%5s", result);  // 限定长度为5的字符串
printf("%s", result);  // hello
  • 指定lengthspecifier
long long result;
sscanf("8888888888888", "%lld", &result);  // 存储类型为long long int
printf("%lld", result);  // 8888888888888
  • 接收但忽略部分字符
char result[100];
sscanf("helloworld", "%*5s %s", result);  // %*5s表示接收但忽略5个字符,%s表示接收剩下的字符,format中的空格会被忽略
printf("%s", result);  // world
  • 集合操作
char result[100];
sscanf("abcdefg8888abc", "%[abc]", result);
// 每个字符只能是a、b、c中的一个,一旦不满足则接收(忽略后面的所有字符,即使可能会再次满足条件)
printf("%s", result);  // abc
  • 指定长度的集合操作
char result[100];
sscanf("ab12cdefg", "%5[a-z0-9]", result);  // 接收长度为5并且由a到z、0到9字符组成的字符串
printf("%s", result);  // ab12c
  • 排除部分字符
char result[100];
sscanf("abcdefg", "%[^d-f]", result);  // 接收由非d、e、f字符组成的字符串
printf("%s", result);  // abc
  • 同时接收多个变量
char name[100];
int age;
sscanf("name=zhangsan;age=24", "%*[^=] = %[^;] ; age=%d", name, &age);  // 分别接收name和age并按指定格式存储
printf("%s\n", name);  // zhangsan
printf("%d\n", age);  // 24
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值