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

C语言字符串操作:手写strlen+常用库函数解析

今天跟着教程学了C语言字符串的几个核心操作,从手写 strlen 到理解 strcmp 、 strncpy ,整理一下笔记~

 

一、自己实现strlen:统计字符串长度

 

 strlen 是用来计算字符串有效字符数(不包含结束符 \0 )的库函数,先试着自己写一个 my_strlen :

#include <stdio.h>

#include <assert.h> // 用于assert断言

 

// 实现strlen:统计字符串长度

size_t my_strlen(const char* str)

{

    assert(str != NULL); // 断言:防止传入空指针(debug模式下触发)

    // 注:这里的if(str==NULL)其实可以去掉,因为assert已经拦截了

    size_t count = 0;

    while (*str != '\0') // 遍历到结束符停止

    {

        count++;

        str++; // 指针后移

    }

    return count;

}

 

int main()

{

    const char *a = "abcde";

    int len = my_strlen(a);

    printf("%d\n", len); // 输出5("abcde"共5个字符)

    return 0;

}

 图例:

 

 

注意点:

 

-  const char* str :加 const 是为了保证函数不会修改传入的字符串;

-  assert(str != NULL) :如果传了空指针,debug模式下会直接报错(比if判断更严格);

-  size_t 是无符号整数类型,专门用来表示长度/大小。

 

二、strcmp:字符串比较

 

 strcmp 是比较两个字符串的库函数,规则是按ASCII码逐字符比较:

 

- 返回值 < 0:前字符串更小;

- 返回值 > 0:前字符串更大;

- 返回值 = 0:两个字符串相等。

 

示例代码(注释里的写法):

#include <string.h> // strcmp需要的头文件

 

int main()

{

    char arr1[] = "abcde";

    char arr2[] = "abcdefg";

    int ret = strcmp(arr1, arr2);

    // "abcde"比"abcdefg"短,比较到第6位时arr1是'\0',所以ret<0

    printf("%d ", ret); 

    return 0;

}

 

 

三、strncpy:指定长度的字符串拷贝

 

 strncpy 是安全版的字符串拷贝(避免 strcpy 的越界风险),第三个参数是“最多拷贝的字符数”。

 

示例代码:

#include <string.h>

 

int main()

{

    char arr[20] = { 0 }; // 目标数组,提前开好足够空间

    char at[] = "abcd";

    // 把at的前3个字符拷贝到arr中

    char *p = strncpy(arr, at, 3); 

    printf("%s\n", p); // 输出"abc"

    printf("%s\n", arr); // 输出"abc"(arr剩余位置是'\0')

    return 0;

}

 

 图例:

 

注意:如果源字符串长度 < 拷贝长度, strncpy 会把剩余位置补 '\0' 。

 

今日总结:

 

今天搞懂了3个字符串操作的核心逻辑:

 

1.  strlen :遍历到 '\0' 统计字符数;

2.  strcmp :逐字符比ASCII码;

3.  strncpy :指定长度拷贝更安全。

http://www.dtcms.com/a/569840.html

相关文章:

  • 自己可以创建公司网站吗赣州网站制作培训
  • 百度优化排名软件seo交流
  • 链表相关的算法题(1)
  • 速成网站建设有哪些专业做饰品的网站app
  • 服务器负载过高的多维度诊断与性能瓶颈定位指南
  • 超云发布R2425存储服务器:以全栈自研引领国产存储新方向
  • 网站域名快速备案做网站没有高清图片怎么办
  • 【Python基础】f-string用法
  • 前端高频面试手写题——扁平化数组转树
  • 网站建设合同通用范本免费推广引流怎么做
  • 上海怎么建设网站网站建设网站制作公司
  • Flink 多流转换
  • Redis_5_单线程模型
  • 做简单网站用什么软件有哪些洛阳网站建设设计公司
  • CTF WEB入门 命令执行篇29-49
  • IDEA自定义类注释、方法注释
  • Grafana12安装部署[特殊字符]
  • 网站建设报价流程河南建设工程信息网站
  • 苍穹外卖(第五天)
  • NFC与RFID防伪标签:构筑产品信任的科技防线
  • 深圳网站建设 设计首选成都展示型网页设计公司
  • 网站三层结构示意图网站建设资讯
  • WithAnyone: Towards Controllable and ID Consistent Image Generation论文阅读
  • 无人机远距离无线通信模块:突破空中通信的未来之钥
  • IDEA:2020.1 下面有四个小版本:2020.1.1 -- 2020.1.4,哪个与Windows7 更兼容
  • 长春建站网站模板网站仿站
  • 【ROS2+相机】在Ubuntu安装realsense-ros
  • 基于B/S架构的物资管理系统的设计与实现(源码+论文+部署+安装)
  • 告别扫描仪!AI一键PBR材质
  • 网站建设公司内幕中企动力科技做什么的