第13章 字符串

{% markmap %}

第13章 字符串

字符串字面量

字符串变量

  • 首先区分一下这两个
    • int a[] = "123456";
    • int *a = "123456";
  • 很显然,上面一个是字符串数组,下面是字符串指针,但是二者大不相同
    • 字符串数组初始化的时候,是从字符串常量那里一个一个拷贝到字符串数组空间中,因此,字符串数组它所在的空间是可以修改的内存空间。
    • 而字符串指针指向的是常量区,常量区是不可以修改的,因此想要通过字符串指针修改值是不允许的。
    • 还有字符数组是个常量指针,是不可以修改其指向其他地址的,而字符指针是可以修改的。

字符串的读和写

  • 写字符串
    • printf
      • 转换说明%s允许printf函数写字符串。
    • puts
      • 更方便
  • 读字符串
    • scanf
      • 转换说明%s允许scanf函数把字符串读入字符数组
    • gets
    • fgets
      • gets函数天生就是不安全的,fgets函数则是一种好得多的选择。

访问字符串的字符

  • 数组或者指针都可以

C语言的字符串库<string.h>

  • strcpy
    • 字符串复制
  • strlen
    • strlen函数返回字符串s的长度:s中第一个空字符之前的字符个数(不包括空字符)
    • strlen和sizeof的区别
      • strlen不包括空字符,sizeof包括空字符
        • 新节点
  • strcat
    • 字符串拼接
  • strcmp
    • 字符串比较
      • 新节点

字符串数组

  • 区分这两种写法
    • char planets[][8] = {"Mercury", "Venus", "Earth","Mars", "Jupiter", "Saturn","Uranus", "Neptune", "Pluto"};
    • char *planets[] = {"Mercury", "Venus", "Earth","Mars", "Jupiter", "Saturn","Uranus", "Neptune", "Pluto"};
  • 虽然看上去差不多,但是内存当中却完全不一样
posted @ 2025-03-28 09:28  StarAire  阅读(12)  评论(0)    收藏  举报