例程三、c语言 字符串匹配 sscanf 字符串查找 返回指针地址 段错误Segmentation fault

本文主要是介绍例程三、c语言 字符串匹配 sscanf 字符串查找 返回指针地址 段错误Segmentation fault,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、首先,介绍下sscanf用法

linux终端窗口下,敲命令:man sscanf可以得到完整描述:

1. 定义:int sscanf(const char *str, const char *format, ...);

2. 与scanf区别:

       The scanf() function reads input from the standard input stream stdin, fscanf() reads input from the stream pointer stream, and sscanf() reads its  input  from  the character string pointed to by str.

3. 使用demo:

vim sscanf_test.c

#include <stdio.h>int main(){char str[64] = "ATTF: 2";int val;sscanf(str, "ATTF: %d", &val);printf("val = %d\n", val);return 0;
}

报错退出后,编译,运行:

二、常见一些用法

  1. 忽略前面字符串

#include <stdio.h>int main(){char str[64] = "ATTF: 2";int val;sscanf(str, "%*s%d", &val);printf("val = %d\n", val);return 0;
}

注意到%d前面加了%*s,本来%s是格式化字符串,加了*之后就是忽略格式化字符串。

另外,%*s跟%d之间可以加空格,也可以不加空格,因为sscanf输入时会忽略前面的空格。

常用的还有%*d  %*c  %*g %*u %*x %*s %*G等等。

注:%g  :根据数值不同会自动选择%f或%e(会省去小数点后多余的0)

输出值同上:

2. 忽略令人头痛的换行符来进行字符串匹配


/** find the position where str2 in str1.* if not, return NULL* else return first find str2 position in str1*/
const char *vip_str_str_len(const char *str, const char *subs, int length){const char* tmp=str;if (!*str || !*subs)return NULL;while (length > 0){//用于每次将父串向后移动一个字符const char* tmp1=tmp;//记录子串地址const char* sub1=subs;while (*sub1!='\0' && length > 0){//若不相等则跳出,将父串后移一个字符if (*sub1!=*tmp1)break;//若相等且子串下一个字符是末尾则是这个父串的子串if (*sub1==*tmp1&&*(sub1+1)=='\0')return tmp;//若相等则继续比较下一个字符if (*sub1==*tmp1){sub1++;tmp1++;}}tmp++;length--;}return NULL;
}const char* vip_str_str(const char* str, const char *subs){const char* tmp=str;if(!*subs)return NULL;while (*tmp!='\0'){//用于每次将父串向后移动一个字符const char* tmp1=tmp;//记录子串地址const char* sub1=subs;while (*sub1!='\0'&&*tmp1!='\0'){//若不相等则跳出,将父串后移一个字符if (*sub1!=*tmp1)break;//若相等且子串下一个字符是末尾则是这个父串的子串if (*sub1==*tmp1&&*(sub1+1)=='\0')return tmp;//若相等则继续比较下一个字符if (*sub1==*tmp1){sub1++;tmp1++;}}tmp++;}return NULL;
}

主函数调用部分代码:

int main(){char str[64] = "\nAT+CSPN \n ATTF:2\n";int val;const char *dida;dida = vip_str_str_len(str, "ATTF", 12);printf("dida = %s\n", dida);sscanf(dida, "ATTF:%d", &val);printf("val = %d\n", val);return 0;
}

编译运行结果:

三、常见的一些坑

1. sscanf编译报警告,运行报段错误Segmentation fault

错误原因:sscanf使用时,要用地址,而不是值,如下图就会报错。

解决办法:

val改为&val即可。

这篇关于例程三、c语言 字符串匹配 sscanf 字符串查找 返回指针地址 段错误Segmentation fault的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/524383

相关文章

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

SpringBoot3匹配Mybatis3的错误与解决方案

《SpringBoot3匹配Mybatis3的错误与解决方案》文章指出SpringBoot3与MyBatis3兼容性问题,因未更新MyBatis-Plus依赖至SpringBoot3专用坐标,导致类冲... 目录SpringBoot3匹配MyBATis3的错误与解决mybatis在SpringBoot3如果

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

Python中高级文本模式匹配与查找技术指南

《Python中高级文本模式匹配与查找技术指南》文本处理是编程世界的永恒主题,而模式匹配则是文本处理的基石,本文将深度剖析PythonCookbook中的核心匹配技术,并结合实际工程案例展示其应用,希... 目录引言一、基础工具:字符串方法与序列匹配二、正则表达式:模式匹配的瑞士军刀2.1 re模块核心AP