利用sscanf()匹配字符串需要注意贪婪匹配
2013-11-07 14:50
162 查看
先来看看下面一段代码:
#include <stdio.h>
int main()
{
char de_info[64]="DE_smartmedia:2.2.2154(121227225952b)";
char db[64]={0};
char version[64]={0};
sscanf(de_info,"DE_%s:%s",db,version);
printf("###%s+++%s###\n",db,version);
}
运行的结果如下:
###smartmedia:2.2.2154(121227225952b)+++###
我们可以看到:后面的字符串并没有匹配到,在这里我们犯了贪婪匹配的错误,第一个%s也包括了:。
修改后的程序如下:
#include <stdio.h>
int main()
{
char de_info[64]="DE_smartmedia:2.2.2154(121227225952b)";
char db[64]={0};
char version[64]={0};
sscanf(de_info,"DE_%[^:]:%s",db,version);
printf("###%s+++%s###\n",db,version);
}
运行结果如下:
###smartmedia+++2.2.2154(121227225952b)###
#include <stdio.h>
int main()
{
char de_info[64]="DE_smartmedia:2.2.2154(121227225952b)";
char db[64]={0};
char version[64]={0};
sscanf(de_info,"DE_%s:%s",db,version);
printf("###%s+++%s###\n",db,version);
}
运行的结果如下:
###smartmedia:2.2.2154(121227225952b)+++###
我们可以看到:后面的字符串并没有匹配到,在这里我们犯了贪婪匹配的错误,第一个%s也包括了:。
修改后的程序如下:
#include <stdio.h>
int main()
{
char de_info[64]="DE_smartmedia:2.2.2154(121227225952b)";
char db[64]={0};
char version[64]={0};
sscanf(de_info,"DE_%[^:]:%s",db,version);
printf("###%s+++%s###\n",db,version);
}
运行结果如下:
###smartmedia+++2.2.2154(121227225952b)###
相关文章推荐
- 利用sscanf()匹配字符串需要注意贪婪匹配
- 利用sscanf()匹配字符串需要注意贪婪匹配
- Vim利用正则表达式替换匹配字符串
- 【Android】隐式调用Activity时匹配category需要注意的细节
- strcat、strcpy、strcmp的实现,以及有关字符串处理需要注意的地方
- 非贪婪匹配:如何使用正则表达式碰到到第一个匹配到的字符串就停止
- java: 正则匹配字符串中多个目标子串(贪婪匹配的模拟实现)
- 使用字节与字符串转换时需要注意的问题
- 字符串打印需要注意的一点小知识点
- 用sscanf判断字符串是否匹配某种简单规则。
- alert(参数),参数为字符串类型时需要注意的问题。
- 前端PHP入门-004-数据类型,特别需要注意字符串
- C# 调用 C++ dll 函数 时传递字符串 需要注意的问题(zz)
- 【廖雪峰 python教程 课后题 切片】利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()方法:
- 【廖雪峰 python教程 课后题 切片】利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()方法:
- 字符串处理strlen函数需要注意的一些小细节问题
- 题目: 输入一串数据,删除重复的数据。注意:读取字符串的顺序为从右往左,如果结果是以0结束,则删除0;如果结果有负号'-' 需要保留。
- 利用反射调用方法时,处理ref,out参数需要注意的问题(转)
- Delphi TPerlRegEx 非贪婪匹配注意事项
- 写正确函数需要注意的地方:在字符串中找出连续最长的数字串,并把这个串的长度返回