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

【C语言练习】060. 使用指针操作字符串

060. 使用指针操作字符串

  • 060. 使用指针操作字符串
      • 何时使用指针字符串
      • 指针字符串 vs 字符数组
      • 注意事项
    • 1. 字符串的遍历
    • 2. 字符串的比较
    • 3. 字符串的复制
    • 4. 字符串的反转
    • 5. 字符串的查找
    • 示例运行
        • 输入:
        • 输出:
    • 注意事项

060. 使用指针操作字符串

在C语言中,字符串本质上是一个以空字符('\0')结尾的字符数组。指针是操作字符串的强大工具,通过指针可以高效地访问和修改字符串中的字符。以下是一些常见的使用指针操作字符串的示例,包括字符串的遍历、比较、复制和反转。

何时使用指针字符串

在C语言中,字符串通常以字符数组或字符指针的形式存在。指针字符串(即通过字符指针操作字符串)在以下场景中更为适用:

动态内存分配
当字符串长度在运行时才能确定时,使用指针可以动态分配内存。例如:

char *str = malloc(100 * sizeof(char));
strcpy(str, "Dynamic string");
free(str);  // 释放内存

字符串传递与修改
函数需要修改传入的字符串时,传递指针比传递数组更高效。例如:

void modifyString(char *s) {s[0] = 'H';
}
char str[] = "hello";
modifyString(str);  // str变为 "Hello"

字符串常量处理
指针可以直接指向字符串常量,但需要注意常量不可修改:

char *msg = "Hello";  // 字符串常量
// msg[0] = 'h';      // 错误:试图修改常量

函数返回字符串
函数需要返回字符串时,通常返回动态分配的指针或静态字符串指针:

char *createString() {char *s = malloc(10);strcpy(s, "Returned");return s;
}

指针字符串 vs 字符数组

字符数组

  • 大小固定,声明时需指定长度。
  • 作为局部变量时,内存分配在栈上。
  • 适合已知长度的静态字符串。

指针字符串

  • 可指向动态分配的内存或字符串常量。
  • 适合需要动态调整或共享字符串的场景。

注意事项

  • 内存管理:动态分配的指针字符串需手动释放,避免内存泄漏。
  • 常量修改:指向字符串常量的指针不可修改内容。
  • 指针算术:可通过指针算术遍历字符串(如 while (*p++))。
// 指针遍历字符串示例
char *p = "Hello";
while (*p != '\0') {printf("%c", *p);p++;
}

1. 字符串的遍历

通过指针可以逐个访问字符串中的每个字符,直到遇到空字符 '\0'

http://www.xdnf.cn/news/8726.html

相关文章:

  • Kotlin全栈工程师转型路径
  • Vue-创建应用/挂载应用/根组件模版-.vue单文件/应用配置
  • Cesium中根据不同条件设置3D Tiles样式
  • 【VBA 中GetOpenFilename】常用友好的人机交互文件全路径选择模式
  • 计算机视觉与深度学习 | 基于 YOLOv8 + BeautyGAN + CodeFormer + Face Parsing 实现简单的人脸美颜
  • 【来自纳米AI-大模型】ubuntu 24.04 登陆界面分辨率太高,内容显示得特别小 问题解决方案(亲测有效)
  • lua脚本学习笔记1:Vscode添加lua环境_lua基本语法
  • HarmonyOS赋能套件介绍
  • 开篇:MCP理论理解和学习
  • 元组可以比较大小吗?一次返回多个值?编程语言的元组?声明变量一定需要指定类型吗?
  • Ubuntu20.04 gr-gsm完整安装教程
  • Kanass V1.1.1版本发布,支持查看项目/迭代/事项进度
  • 剖析 Spring 中 @ResponseBody 原理与 Tomcat NIO 写事件(SelectionKey.OP_WRITE)的协作机制
  • MySQL分库分表
  • vue3中使用computed
  • Spark集群架构解析:核心组件与Standalone、YARN模式深度对比(AM,Container,Driver,Executor)
  • kafka之操作示例
  • 大文件上传,对接阿里oss采用前端分片技术。完成对应需求!
  • 【MySQL】第7节|Mysql锁机制与优化实践以及MVCC底层原理剖析
  • ubuntu 安装latex
  • 清除 Ubuntu 磁盘空间
  • 安卓开发用到的设计模式(2)结构型模式
  • 开发者工具箱-鸿蒙金额转换开发笔记
  • R语言学习--Day08--bootstrap原理及误区
  • Ollama01-安装教程
  • 【MySQL】07.表内容的操作
  • Android 16系统源码_自由窗口(一)触发自由窗口模式
  • Gateway全局过滤器:接口耗时统计与黑白名单配置
  • R语言科研编程-柱状图
  • STM32 定时器输出比较深度解析:从原理到电机控制应用 (详解)