当前位置: 首页 > news >正文

c语言笔记 字符串函数---strstr strlen strtok以及sizeof

目录

函数strstr

功能

函数strlen

功能   注意一  注意二

函数sizeof

功能

函数strtok

功能  注意


函数strstr

功能:strstr是查找字符串中子串的函数,例如"abcdef" 如果出现字串"abc"或者其他字串,如果匹配成功就会返回指向字串的指针。失败返回NULL

  • 所需头文件 #include
  • strstr(指向该字符串的指针,子串)
  • strstr(字符串的地址,子串)

具体使用代码演示:

#include<stdio.h>
#include<string.h>
int main()
{
    char  *s = "abcfef.txt";
    char *p = strstr(s,".txt");
    if(p == NULL)
    {
        printf("没有.txt文件\n");
    }
    else 
    {
        printf("该文件的类型是%s\n",p);
    }
}

函数strlen

功能:strlen函数是计算一个字符串内的有效长度,有效长度是不包括字符串中的结束符'\0'

  • 头文件 #include
  • strlen(指向字符串的指针)
  • strlen(字符串的地址)
  • 返回值是整型----字符串的有效长度

注意一

  • 使用strlen函数的时候,如果出现\0结束标识,strlen函数就会停止计算,无论\0后面是否数值
  • 我们在使用sizeof的时候如果把指针名放进去,那就是计算指针的内存大小,我们应该是放数组名进去,或者放字符串

代码演示:

#include<stdio.h>
#include<string.h>
int main()
{
    char *s = "baidu.com";
    printf("%ld\n",strlen(s));
    printf("%ld\n",sizeof("baidu.com"));
    return 0;
}

注意二

1.当数组作为函数参数传递时,它会退化为指向其首元素的指针。

     char *s = "baidu.com";

     此时sizeof(s)操作数将返回指针的大小,而不是数组的大小。

若是char s[]="baidu.com",sizeof(s),

     此时sizeof(s)操作数将返回数组所代表的字节大小。  strlen函数只用于计算字符串的有效字节,而sizeof可以计算任意类型的字节。

2.在动态分配的数组(通过malloc或new)中,sizeof无法获取数组的大小,因为动态分配的数组在运行时才确定大小,编译器无法在编译时计算其大小。

例如:

    char *s = "baidu.com";
    char p[] = "baidu.com";
    printf("%ld\n",strlen(s));
    printf("%ld\n",sizeof(p));

函数sizeof

功能:sizeof函数是用来计算变量,类型,指针,数组,字符串的字节大小

  • 当作用于指针时,返回指针的大小。
  • 当作用于数组时,返回整个数组的大小。
  • 当数组作为函数参数传递时,它会退化为指向其首元素的指针。此时,sizeof操作数将返回指针的大小,而不是数组的大小。
  • 在动态分配的数组(通过malloc或new)中,sizeof无法获取数组的大小,因为动态分配的数组在运行时才确定大小,编译器无法在编译时计算其大小。

函数strtok

功能:分割字符串中的字串

头文件#include strtok(数组名,符号) strtok(指向数组的指针,符号)
  1. 头文件#include
  2. strtok(数组名,符号)
  3. strtok(指向数组的指针,符号)
  4. 如果成功则返回字串的指针
  5. 失败返回NULL,标识分解完毕

注意

  • 因为strtok是会修改字符串的值将其置为\0,所以应该给它传数组名或者指向数组的指针,符号就是以什么为分割的界限。
  • 使用strtok函数的时候当它遇到分解界限的符号时会将其置为\0,strtok是会改变字符串的
  • 第一次调用strtok函数指向字符串str后,例如:strtok(str,";, "),下次掉用都是用NULL代表str 如strtok(NULL,",; ",此后每次调用都要NULL代替str
代码演示:
#include <stdio.h>
#include <string.h>
int main()
{
    char s[] = "abcd,    1234   ;xy  ,   opasda   ";
    char *p = strtok(s,";, ");
    while(p!=NULL)
    {
        printf("%s\n",p);
        p = strtok(NULL,",; ");//指针p不断的偏移,不断的指向第一个地址
    }
    return 0;
}

相关文章:

  • 1.5.3 掌握Scala内建控制结构 - for循环
  • 告别数据库束缚!用esProc在 csv 文件上执行 SQL
  • 搭建主从服务器
  • K8S之QoS详解
  • oracle 基础知识之 多表查询
  • soul能用ip精准定位吗?ip属地准确吗
  • hot100算法刷题:二叉树的层序遍历
  • Spring Boot 核心知识点深度详解:自动化配置 (Auto-configuration) - 解锁 Spring Boot 的 “魔法”
  • 远程访问家里电脑上部署的Stable diffusion - 免费篇
  • error: Microsoft Visual C++ 14.0 or greater is required解决不需要安装到c盘等
  • Mybatis使用Druid连接池
  • 0x04.若依框架微服务开发(含AI模块运行)
  • Kotlin 中 let 方法的作用和使用场景
  • 人工智能助力家庭机器人:从清洁到陪伴的智能转型
  • ngx_http_conf_ctx_t
  • 【源码分析】Nacos实例注册流程分析-事件驱动框架
  • react实现虚拟列表
  • C#语法基础总结
  • C语言刷题第六章(下)
  • 神策数据接入 DeepSeek,AI 赋能数据分析与智能运营
  • 国台办:民进党当局所谓“对等尊严”,就是企图改变两岸同属一中
  • 共绘“彩色上海”,IP SH艺术共创沙龙首期圆满举办
  • 魔都眼|静安光影派对五一启幕:苏河湾看徐悲鸿艺术画作
  • 牛市早报|今年第二批810亿元超长期特别国债资金下达,支持消费品以旧换新
  • 光明日报:回应辅警“转正”呼声,是一门政民互动公开课
  • 北京银行一季度净赚超76亿降逾2%,不良贷款率微降